Catalyst 转换的 Mac 应用程序中的滚轮事件捕获
Scroll Wheel event capture in a Catalyst-converted Mac app
在使用使用 Catalyst 从 iOS 转换而来的 Mac 应用程序时,为 Mac 捕获鼠标滚轮 activity 的常用方法,例如
- (void)scrollWheel:(NSEvent *)event;
不工作,因为在构建 Catalyst 转换的应用程序时显然不支持 NSEvent。
我需要控制的对象在常规图像容器中,而不是在滚动视图容器中。我只是想使用滚轮来更改加载的图像。触控板 activity 工作正常,但到目前为止捕获滚轮一直难以捉摸。
谢谢!
使用 UIPanGestureRecognizer 并将 allowedScrollTypesMask 设置为 UIScrollTypeMaskDiscrete:
// pan gesture to recognize mouse-wheel scrolling (zoom)
UIPanGestureRecognizer * scrollWheelGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleScrollWheelGesture:)];
scrollWheelGesture.allowedScrollTypesMask = UIScrollTypeMaskDiscrete; // only accept scroll-wheel, not track-pad
scrollWheelGesture.maximumNumberOfTouches = 0;
[self.view addGestureRecognizer:scrollWheelGesture];
然后
- (void)handleScrollWheelGesture:(UIPanGestureRecognizer *)pan
{
CGPoint delta = [pan translationInView:self.view];
CGFloat zoom = (1000 + delta.y) / 1000;
[self adjustZoomBy:zoom];
}
Swift 5:
func setupScrollWheel() {
let scrollWheelGesture = UIPanGestureRecognizer(target: self, action: #selector(scrollWheelGestureRecognizer(_:)))
scrollWheelGesture.allowedScrollTypesMask = .discrete
scrollWheelGesture.maximumNumberOfTouches = 0
view.addGestureRecognizer(scrollWheelGesture)
}
@objc func scrollWheelGestureRecognizer(_ recognizer: UIPanGestureRecognizer) {
let delta = recognizer.translation(in: view)
}
在使用使用 Catalyst 从 iOS 转换而来的 Mac 应用程序时,为 Mac 捕获鼠标滚轮 activity 的常用方法,例如
- (void)scrollWheel:(NSEvent *)event;
不工作,因为在构建 Catalyst 转换的应用程序时显然不支持 NSEvent。
我需要控制的对象在常规图像容器中,而不是在滚动视图容器中。我只是想使用滚轮来更改加载的图像。触控板 activity 工作正常,但到目前为止捕获滚轮一直难以捉摸。
谢谢!
使用 UIPanGestureRecognizer 并将 allowedScrollTypesMask 设置为 UIScrollTypeMaskDiscrete:
// pan gesture to recognize mouse-wheel scrolling (zoom)
UIPanGestureRecognizer * scrollWheelGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleScrollWheelGesture:)];
scrollWheelGesture.allowedScrollTypesMask = UIScrollTypeMaskDiscrete; // only accept scroll-wheel, not track-pad
scrollWheelGesture.maximumNumberOfTouches = 0;
[self.view addGestureRecognizer:scrollWheelGesture];
然后
- (void)handleScrollWheelGesture:(UIPanGestureRecognizer *)pan
{
CGPoint delta = [pan translationInView:self.view];
CGFloat zoom = (1000 + delta.y) / 1000;
[self adjustZoomBy:zoom];
}
Swift 5:
func setupScrollWheel() {
let scrollWheelGesture = UIPanGestureRecognizer(target: self, action: #selector(scrollWheelGestureRecognizer(_:)))
scrollWheelGesture.allowedScrollTypesMask = .discrete
scrollWheelGesture.maximumNumberOfTouches = 0
view.addGestureRecognizer(scrollWheelGesture)
}
@objc func scrollWheelGestureRecognizer(_ recognizer: UIPanGestureRecognizer) {
let delta = recognizer.translation(in: view)
}