首页 > 解决方案 > 在 MacCatalyst 中捕获滚轮事件

问题描述

我已经能够使用 UIPanGestureRecognizer 捕获鼠标滚轮。

`
    let tPan = UIPanGestureRecognizer(target: self, action: #selector(self.wasPanned))
    tPan.maximumNumberOfTouches = 1
    tPan.minimumNumberOfTouches = 1
    if #available(macCatalyst 13.4, *) {
        tPan.allowedScrollTypesMask = .discrete
    }
    self.addGestureRecognizer(tPan)

}

@objc func wasPanned(_ pan: UIPanGestureRecognizer) {
    let thispan = pan
    print(pan)
}

`

但是,这会捕获任何平移动作。我如何确定这是否是鼠标滚轮的结果?

标签: mousewheelmac-catalyst

解决方案


您可以检查传递给委托方法gestureRecognizer:shouldReceiveEvent:的事件,并且只接受其类型为的事件scroll

extension ViewController: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive event: UIEvent) -> Bool {
        event.type == .scroll
    }
}

或者您可以简单地将属性设置allowedTouchTypes为一个空数组,这意味着所有触摸类型都将被忽略:

gestureRecognizer.allowedTouchTypes = []

推荐阅读