2012-09-15 6 views
3

현재 OS X의 OpenGL 창에 전체 화면보기를 추가하는 중입니다. OS X의 "전체 화면 모드"를 사용하지 않습니다. 사용자 화면. 애플의 설명서에 따라 (전체 화면 창 사이를 전환,코코아 창 전체 화면 만들기

- (void)toggleFullScreen:(id)sender 
{ 
    _fullscreen = !_fullscreen; 
    if(_fullscreen) { 
     NSRect screenRect = [[NSScreen mainScreen] frame]; 
     [self setStyleMask:NSBorderlessWindowMask]; 
     [self setFrame:screenRect display:YES]; 
     [self setLevel:NSMainMenuWindowLevel+1]; 
     [self setOpaque:YES]; 
     [self setHidesOnDeactivate:YES]; 
    } else { 
     NSRect screenRect = [[NSScreen mainScreen] frame]; 
     unsigned int width = (unsigned int)(screenRect.size.width/2.0f); 
     unsigned int height = (unsigned int)(screenRect.size.height/2.0f); 
     NSRect frame = NSMakeRect(0, screenRect.size.height-height, width, height); 

     [self setStyleMask:NSTitledWindowMask | NSResizableWindowMask]; 
     [self setFrame:frame display:YES]; 
     [self setLevel:NSNormalWindowLevel]; 
     [self setOpaque:YES]; 
     [self setHidesOnDeactivate:NO]; 
    } 
} 

이 대부분 제대로 작동하는 것 같다 :

난 내 자신의 사용자 정의 창 클래스는 NSWindow에서 파생 된 클래스에서, 나는 toggleFullscreen: 선택을 덮어 쓴이 here)와 절반의 화면 해상도의 창이 있습니다.

두 가지 모드를 전환하면 내 창에 "초점이 맞지 않습니다."라는 문제가 있습니다. 내가 모드를 전환 한 직후 키보드 바로 가기 키를 누르면 OS X 오류 "삐"가납니다. 다시 토글을 사용하려면 먼저 창을 클릭하여 "다시 활성화"해야합니다.

내 함수에 [self makeKeyAndOrderFront:nil];을 추가하려고 시도했지만 문제가 해결되지 않습니다. 내가 필요한 것은 전환하는 동안 창을 "집중"상태로 유지하는 방법입니다. 이 문제를 제외하고이 방법은 완벽하게 작동하며 내 NSView을 변경할 필요가 없습니다.

편집

의 관련 확실하지만, 나는 펜촉에서로드, 프로그래밍이 창을 생성하지 아니에요. (사자로) 올바른 현대적인 방법을 것으로 보인다

+0

경계선 윈도우가 아닌 기본적으로 키 당신은'오버라이드 (override) 할 필요가 그래서 -canBecomeKeyWindow' : - (BOOL) canBecomeKeyWindow { \t 반환 YES; } 또한'-setFrame : display : animate :'대신'-setFrame : display'를 사용하면 멋진 애니메이션을 얻을 수 있습니다. –

+0

@ JustinBoo :'canBecomeKeyWindow'를 추가해도 차이가없는 것처럼 보입니다.렌더링에 관해서는, 저는'CVDisplayLink'를 사용하고 있습니다 :-) – Kyle

+0

레코드에 대해서는 관련 정보가있는 좋은 페이지가 있습니다 (http://cocoadev.com/wiki/BorderlessWindow). 훌륭한 솔루션을 제공하는 것 같습니다. 누군가 NSWindowController를 사용하여이 문제를 해결할 수 있다고 말했지만 나에게 도움이되지 못했습니다. – Kyle

답변

2

이보다 쉬운 방법 ... 내 NSApplicationDelegate의 초기화 방법에

(미안 난 그렇게 내 용어는 잘못 새로운 해요)을 생성 후, 창 ...

[window setCollectionBehavior:(NSWindowCollectionBehaviorFullScreenPrimary)];

은 다음, toggleFullScreen을 해고 대상 = 전무로, 메뉴에서 말한다.

아이콘으로 새 이름이 지정된 바탕 화면을 만들고 창을 슬라이드하여 전체 화면으로 만듭니다. Chrome이나 Safari를 전체 화면으로 만들 때와 마찬가지입니다. 나도 펜촉이나 xib없이 또는 아이들이 요즘 뭐라고 부르든지간에 그것을하고있다.

This page 인터페이스 작성기 방식에 대해 이야기합니다.

This은 Apple의 공식 문서입니다.

0

나는이 문제가 자신에 와서 setStyleMask하기 전에이 작업을 호출하는 것을 발견

[window orderOut:nil]; 

그리고 것은 이것을 setStyleMask 나에게 잃어버린 초점 문제를 해결 한 후 :

[window makeKeyAndOrderFront:nil];