2016-07-30 44 views
1

Ich unterteile NSView, um es skalierbar zu bekommen. Nach Apples 'View Geometry' Leitfaden sollten die Grenzen strecken, um den Rahmen zu passen. Beim Einstellen der Bildgröße ändert sich nichts. Als ich die Bildgröße zur Konsole ausgedruckt habe, habe ich gesehen, dass setFrameSize buchstäblich nichts tut.Skalieren von NSView

Also hier meine Frage: Wie kann ich die eingestellte Bildgröße ändern (ohne die eingestellte Größe zu setzen)? (Autolayout deaktiviert)

class ScaledView : NSView { 
    let scale: CGFloat 
    let element: Drawable 

    required init?(coder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") // not needed, adding it programmatically 
    } 

    init(frame frameRect: NSRect, scale: CGFloat, toDraw element: DoubleValue) { 
     self.scale = scale 
     self.element = element; 
     super.init(frame: frameRect) 
     self.setFrameSize(CGSize(width: self.bounds.size.width * scale, height: self.bounds.size.height * scale)) 
    } 

    override func drawRect(dirtyRect: NSRect) { 
     element.draw(dirtyRect, parent: self) 
    } 
} 

Antwort

2

Sind Sie sicher, dass Sie nicht die Grenzen festlegen wollen, nicht den Rahmen? Wenn Sie den Rahmen ändern, wird die Größe der Ansicht im Koordinatensystem des übergeordneten Elements geändert, wodurch sich nicht nur die Skalierung des Inhalts ändert, sondern auch die Darstellung in der Superansicht. Wenn Sie nur den Inhalt der Ansicht skalieren möchten, wird im Handbuch Geometrie anzeigen Folgendes angezeigt:

Um das Koordinatensystem zu verschieben oder zu skalieren, ändern Sie das Begrenzungsrechteck der Ansicht. Durch Ändern des Begrenzungsrechtecks ​​wird das Basiskoordinatensystem eingerichtet, mit dem alle von der Ansicht ausgeführten Zeichnungen beginnen. Konkrete Unterklassen von NSView ändern das Begrenzungsrechteck normalerweise sofort nach Bedarf in ihren initWithFrame: -Methoden oder beim Laden einer NIB-Datei, die die Sicht enthält.

+0

Die Sache ist, ich möchte meinen Inhalt auf voller Größe zeichnen und verkleinern, so dass ich von einem kleineren Rahmen und größeren Grenzen habe. Deshalb ändere ich den Rahmen. Irgendeine Idee, wie man das löst? – Jofkos

+1

Sicher - lass den Rahmen so sein, wie er sein wird (wieder, so sieht die Ansicht auf dem Bildschirm aus und wird wahrscheinlich vom Benutzer oder vom Fenster oder etwas gesteuert), dann setze deine Grenzen auf das, was du willst. Sie können die Grenzen größer als der Rahmen oder kleiner als der Rahmen festlegen, um den Inhalt Ihrer Ansicht nach oben bzw. unten zu skalieren. – andyvn22

+0

Danke, das war es. Ich weiß nicht, warum ich nicht daran gedacht hatte ... – Jofkos