2012-07-07 35 views
1

我有一個嵌入在NSScrollView IKImageBrowserView,以幫助測試這個問題IKImageBrowserView只填充了NSScrollView的一半寬度。NSEventPhaseEnded沒有調用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會被調用。

爲什麼IK​​ImageBrowserView阻止在我的NSScrollView上調用NSEventPhaseEnded?

回答

2

向蘋果公司的一名有用的工程師說道,他告訴我這種行爲實際上是一個錯誤。 ImageKit不幸的是吃了一些scrollWheel事件。作爲解決方法,子類IKImageBrowserView,實現scrollWheel並將事件轉發到「超級」和封閉的滾動視圖。

@implementation MyImageBrowserView 

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

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

@end