【发布时间】:2015-09-20 02:13:21
【问题描述】:
当我在 NSScrollView 中覆盖 scrollWheel(theEvent: NSEvent) 函数时遇到了一个奇怪的错误。
这是我的代码:
import Cocoa
class GraphScrollView: NSScrollView {
var axisScrollViewInstance: AxisScrollView?
override func scrollWheel(theEvent: NSEvent) {
if theEvent.deltaY != 0 {
axisScrollViewInstance?.scrollEventFromOtherScrollView(theEvent)
super.scrollWheel(theEvent)
} else if theEvent.deltaX != 0 {
super.scrollWheel(theEvent)
}
}
}
class AxisScrollView: NSScrollView {
var graphScrollViewInstance: GraphScrollView?
override func scrollWheel(theEvent: NSEvent) {
if theEvent.deltaY != 0 {
super.scrollWheel(theEvent)
graphScrollViewInstance?.scrollWheel(theEvent)
}
}
func scrollEventFromOtherScrollView(theEvent: NSEvent) {
if theEvent.deltaY != 0 {
super.scrollWheel(theEvent)
}
}
}
代码基本上检查用户滚动的方向,如果方向是垂直的,则将 NSEvent 转发到另一个 NSScrollView。我需要这个,以便我可以有两个相邻的 NSScrollView,它们都垂直滚动,其中一个也水平滚动。例如,您可以查看 Mac 日历应用程序,该应用程序的左侧有一个小时列,仅垂直滚动,右侧有一个水平和垂直滚动的周概览。
但是,如果我覆盖 scrollWheel 方法并从内部调用超级函数,则会导致 Mighty Mouse 出现奇怪的问题。我只能向上和向右滚动,而如果我向任何其他方向滚动,它什么也不做,尽管 NSEvent 总是发生,不管我向哪个方向滚动。过了一会儿,它完全停止滚动。
我已经尝试过简单地覆盖 scrollWheel 方法,并且只使用这样的事件调用超级函数:
override func scrollWheel(theEvent: NSEvent) {
super.scrollWheel(theEvent)
}
但它会导致同样的问题。我有第二个(非 Apple)鼠标连接到我的系统,它有一个“普通”滚轮,我的代码可以正常工作。
您知道问题可能是什么吗?我听说 NSEvents 有不同的子类型(1:Apple 设备,0:任何其他设备)。也许这与它有关? 否则,你知道我怎样才能让两个相邻的 NSScrollView 同时垂直滚动吗?
【问题讨论】:
标签: macos swift mouse nsscrollview nsevent