테두리가없는 NSPanel이 있는데 처음 실행하면 포커스가 있습니다. mousedragged 메소드가 올바르게 트리거되지만 다른 앱으로 포커스를 전환 한 다음 NSPanel로 돌아갈 때 포커스가 있습니다. (NSNonactivatingPanelMask로 설정) 더 이상 mousedragged 이벤트를 수신하지 않습니다.NSPanel이 mousedragged 이벤트를 수신하지 못했습니다.
여전히 mouseup 및 mousedown 이벤트가 발생하므로 mousedragged 이벤트가 실행되지 않는 이유가 없습니다.
아이디어가 있으십니까? 여기
는 초기화됩니다 방법은 다음과 같습니다
_panel = [[MyPanel alloc] initWithContentRect:frame
styleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask
backing:NSBackingStoreBuffered
defer:NO];
나는 또한 내 패널 클래스에 모든 방법을 추가하는 시도했다 :
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow
{
return YES;
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (BOOL)acceptsFirstResponder
{
return YES;
}
- (BOOL)acceptsFirstMouse
{
return YES;
}
그리고 아래로 마우스에 그것을 첫 번째로 반응을 (이 그것을 여전히) 수신 :
- (void)mouseDown:(NSEvent *)theEvent
{
[self makeFirstResponder:self];
[self makeKeyWindow];
[self setBackgroundColor:[NSColor redColor]];
[self display];
}
(가) 단지의 mouseDragged
이 포함- (void)mouseDragged:(NSEvent *)theEvent
{
[self setBackgroundColor:[NSColor greenColor]];
[self display];
NSLog(@"dragged");
}
창에 포커스를 놓고 싶지 않습니다. (초점은 아래의 타사 앱에 남아 있어야합니다).
업데이트 : 나는 샘플 프로젝트를 추가 한, 여기 다운로드 : http://users.telenet.be/prullen/MovingPanel.zip
당신은 당신이 먼저 응용 프로그램을 실행하고 드래그 할 때, 출력 지속적으로 CONSOLE.LOG에서 "드래그"할 것이다 살펴 보 겠지만 (배경색은 녹색). 그런 다음 다른 앱으로 전환 한 다음 움직이는 패널 앱으로 돌아 가면 드래그하여 더 이상 아무 것도 출력하지 않습니다. (그리고 mousedown 이벤트 핸들러에서 설정 한 배경색은 빨간색으로 표시됩니다).
NSNonactivatingPanelMask가 없으면 정상적으로 작동하지만 내 패널 아래 창은 계속 활성화되어 있어야합니다. 이를 수행하는 다른 방법이 있다면 공유하십시오.
패널에서 빠르게 두 번 클릭 한 다음 끌면 녹색으로 바뀌므로 (mousedragged가 호출 됨) 이동하지 않습니다 ... 무엇을해야할지 모르겠습니다. 생각 해봐.
감사합니다. – Wesley