Macos 覆盖滚轮功能时,NSScrollView中的滚动停止
当我覆盖NSScrollView中的scrollWheel(theEvent:NSEvent)函数时,我遇到了一个奇怪的错误 这是我的密码:Macos 覆盖滚轮功能时,NSScrollView中的滚动停止,macos,swift,mouse,nsscrollview,nsevent,Macos,Swift,Mouse,Nsscrollview,Nsevent,当我覆盖NSScrollView中的scrollWheel(theEvent:NSEvent)函数时,我遇到了一个奇怪的错误 这是我的密码: import Cocoa class GraphScrollView: NSScrollView { var axisScrollViewInstance: AxisScrollView? override func scrollWheel(theEvent: NSEvent) { if theEvent.deltaY
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 Calendar应用程序,它在左侧有一个小时列,只能垂直滚动,在右侧有一个星期概览,可以水平和垂直滚动
但是,如果我覆盖了scrollWheel方法并从内部调用超级函数,就会导致强大的鼠标出现奇怪的问题。我只能向上和向右滚动,而如果我向任何其他方向滚动,它不会起任何作用,尽管N事件总是发生,不管我向哪个方向滚动。一段时间后,它完全停止滚动
我已经尝试过简单地覆盖scrollWheel方法,并仅使用如下事件调用super函数:
override func scrollWheel(theEvent: NSEvent) {
super.scrollWheel(theEvent)
}
但它也会导致同样的问题。我有第二个(非苹果)鼠标连接到我的系统,它有一个“正常”的滚轮,我的代码可以很好地运行
你知道问题出在哪里吗?我听说N事件属于不同的子类型(1:苹果设备,0:任何其他设备)。也许这与此有关?
否则,您知道如何让两个NSScrollView相邻,同时垂直滚动吗 好的,这是Xcode 6.4中的界面生成器的一个缺陷,可能在早期版本中也是如此。必须确保选中NSScrollView属性检查器中的“显示垂直滚动条”和“显示水平滚动条”框 如果选中这两个复选框,则覆盖滚轮(theEvent:NSEvent)功能不会有问题。然后,您可以通过在例如您的init()中将和设置为false,以编程方式再次删除滚动条,而不会出现问题
于2015年10月12日更新 我已经向苹果公司报告了这个“bug”,但是,通过覆盖-scrollWheel函数,视图似乎失去了它的响应滚动功能 以下是苹果开发团队的答案:
非常感谢这个帖子@Peter。我们面临着同样的问题。