我在NSScrollView中嵌入了一个IKImageBrowserView,以帮助测试这个问题,IKImageBrowserView只填充NSScrollView宽度的一半。
我的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?
答案 0 :(得分: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