2012-07-07 6 views
1

이 문제를 테스트하는 데 도움이되는 NSScrollView 내에 IKImageBrowserView가 포함되어 있습니다. IKImageBrowserView는 NSScrollView의 너비의 절반 만 채 웁니다.NKEventPhaseEnded가 NSScrollView에서 IKImageBrowserView와 함께 호출되지 않음

내 NSScrollView 하위 클래스는 스크롤을 시작하고 끝낼 때 스크롤 막대에서 다음 메소드와 로그를 구현합니다.

- (void)scrollWheel:(NSEvent *)event { 
    switch (event.phase) { 
     case NSEventPhaseBegan: 
      NSLog(@"NSEventPhaseBegan"); 
      break; 
     case NSEventPhaseEnded: 
      NSLog(@"NSEventPhaseEnded"); 
      break; 
    } 

    [super scrollWheel:event]; 
} 

NSEventPhaseBegan 이벤트 단계가 성공적으로 스크롤을 시작할 때 커서가 IKImageBrowserView 이상인지 여부를 호출합니다. 이것이 예상되는 동작입니다.

그러나 스크롤을 중지 할 때 커서가 IKImageBrowserView를 초과하면 NSEventPhaseEnded 이벤트 단계가 호출되지 않습니다. 커서가 IKImageBrowserView를 넘지 않으면 NSEventPhaseEnded가 호출됩니다.

IKImageBrowserView가 NSScrollView에서 NSEventPhaseEnded를 호출하지 못하게하는 이유는 무엇입니까?

답변

2

누가이 문제가 실제로 버그인지 말해 준 Apple의 도움을 준 엔지니어에게 말했습니다. ImageKit은 불행히도 scrollWheel 이벤트를 일부 먹고 있습니다. 이 문제를 해결하려면 IKImageBrowserView를 서브 클래스 화하고 scrollWheel을 구현 한 다음 이벤트를 "super"와 둘러싸는 scrollview에 전달하십시오.

@implementation MyImageBrowserView 

- (void)scrollWheel:(NSEvent *)theEvent { 
    [super scrollWheel:theEvent]; 

    if ([theEvent phase] == NSEventPhaseEnded) 
     [[self enclosingScrollView] scrollWheel:theEvent]; 
    } 
} 

@end