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.
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