2011-01-09 4 views
3

NSWindow의 contentView는 NSView 하위 클래스입니다. 서브 뷰로 다른 NSView 서브 클래스가 있습니다. 하위 뷰는 레이어 기반이며 그 레이어는 하위 레이어를 포함합니다. 하위 계층 중 일부는 추가 하위 계층을가집니다.코코아 - 중첩 된 NSViews 및 CALayers를 비례 적으로 크기 조정

창이 크기가 조정될 때 전체 크기가 비례 적으로 조정되기를 원합니다. 일어날 수 있도록 그것을 설정하는 올바른 방법은 무엇입니까?

감사

편집 : 나는 모든 인터페이스 빌더를 사용하고 있지 않다.

+0

문서에서보기의 경계를 설정하면 프레임이 변경 될 때 고정 된 상태로 유지된다는 것이 설명서에 나와 있습니다. 이론적으로 경계가 변경되지 않으면 프레임이 변경 될 때 내용이 변환으로 렌더링됩니다. 그러나 경계를 고정시킬 방법을 아직 찾지 못했습니다. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/Coordinates/Coordinates.html%23//apple_ref/doc/uid/TP40002978-CH10-SW10 – Douglas

답변

1

부모 창 크기를 조정할 때 NSView의 내용을 비례 적으로 조정하기 위해 수행 한 작업은 다음과 같습니다. 먼저 인터페이스 빌더에서 NSView를 창에 추가 한 다음 AppDelegate에 NSView를 추가했습니다. 내 주소는 scrollView입니다. scrollView에서 모든 자동 크기 조정 동작을 제거했습니다.

- (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]; 
} 

이 너무 윈도우 위임에 AppDelegate에 변 :

그런 다음 내 AppDelegate에 내가이 추가되었습니다. 좋아요. 논리가별로 없기 때문에 좋습니다. 프레임을 변경하는 동안 경계를 일정하게 유지하면 scrollView의 내용이 부드럽게 축소됩니다.

+0

NSView 등을위한'setContentAspectRatio' 자체? –