2011-01-09 8 views
3

Die contentView von NSWindow ist eine NSView-Unterklasse. Es hat einige andere NSView-Unterklassen als Subviews. Die Untersichten basieren auf Ebenen und diese Ebenen wiederum enthalten Unterebenen. Einige der Sublayer haben weitere Sub-Sublayer.Kakao - geschachtelte NSViews und CALayers proportional skalieren

Ich möchte das Ganze proportional skalieren, wenn das Fenster in der Größe geändert wird. Was ist der richtige Weg, um es einzurichten?

Dank

EDIT: Ich bin Interface Builder nicht zu verwenden.

+0

Die Dokumentation schlägt vor, dass das Festlegen der Begrenzungen der Ansicht bewirkt, dass sie beim Ändern des Rahmens unverändert bleiben. Wenn sich die Grenzen nicht ändern, wird der Inhalt theoretisch mit einer Transformation gerendert, wenn sich der Rahmen ändert. Aber ich habe noch nicht ausgearbeitet, wie ich die Grenzen einhalten kann. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23//apple_ref/doc/uid/TP40002978-CH10-SW10 – Douglas

Antwort

1

Hier ist, was ich getan habe, um den Inhalt eines NSView proportional zu skalieren, wenn ich die Größe des übergeordneten Fensters ändere. Zuerst habe ich im Interface Builder mein NSView zum Fenster hinzugefügt und dann einen Verweis darauf in meinem AppDelegate hinzugefügt. Meine heißt zufällig scrollView. Ich habe das gesamte automatische Größenänderungsverhalten von scrollView entfernt.

Dann in meinem AppDelegate habe ich dies:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // keep the aspect ratio constant so that the content looks good 
    [window setContentAspectRatio:NSMakeSize(2, 1)]; 
    window.delegate = self; 
} 

- (void)windowDidResize:(NSNotification *)notification { 
    // size the scrollView to fill the window, but keep its bounds constant 
    NSRect rect = [[window contentView] frame]; 
    NSRect oldBounds = [scrollView bounds]; 
    [scrollView setFrame:rect]; 
    [scrollView setBounds:oldBounds]; 
} 

Damit wird das AppDelegate in das Fenster Delegierten zu. Gut, weil ich nicht viel Logik darin habe. Indem Sie die Grenzen konstant halten, während Sie den Rahmen ändern, wird der Inhalt von scrollView gleichmäßig verkleinert.

+0

gibt es einen Weg zu 'setContentAspectRatio' für ein NSView, etc, selbst? –