我在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];
}当您开始滚动时,无论光标是否在IKImageBrowserView上,NSEventPhaseBegan事件阶段都会成功调用。这是预期的行为。
但是当您停止滚动时,当光标位于IKImageBrowserView上时,不会调用NSEventPhaseEnded事件阶段。如果光标不在IKImageBrowserView上,则会调用NSEventPhaseEnded。
为什么IKImageBrowserView阻止在我的NSScrollView上调用NSEventPhaseEnded?
发布于 2012-08-02 04:15:10
与苹果的一位乐于助人的工程师交谈,他告诉我,这种行为实际上是一个错误。不幸的是,ImageKit吃了一些scrollWheel事件。作为一种解决办法,将IKImageBrowserView子类化,实现scrollWheel,并将事件转发给"super“和包含的滚动视图。
@implementation MyImageBrowserView
- (void)scrollWheel:(NSEvent *)theEvent {
[super scrollWheel:theEvent];
if ([theEvent phase] == NSEventPhaseEnded)
[[self enclosingScrollView] scrollWheel:theEvent];
}
}
@endhttps://stackoverflow.com/questions/11378323
复制相似问题