获取自定义 UIView 以响应两指触控板滚动手势(或鼠标滚轮)

Jar*_*ike 6 trackpad gesture ipados

我有一个带有自定义 UIView 的 iPad 应用程序(在 C# 中),它允许通过触摸和 Apple Pencil 手写笔触摸进行输入。我正在尝试集成对触控板/鼠标间接支持(光标,或 Apple 所说的“指针”)。

我使用 HoverGestureRecognizer 悬停工作。我使用正常的触摸开始/移动/结束/取消事件进行了右键单击和控制单击工作并检查 .type == .indirectPointer 然后检查是否设置了 event.ModifierFlags 中的控制键修饰符,或者是否设置了 event.ButtonMask == 次要的。

我花了很多时间在 Apple Developer 网站上搜索文档,从这里开始并扩展:

不知何故,当发生两指触控板滚动(或鼠标滚轮滚动)时,我无法在我的代码中找到系统调用的 API 。(在另一个滚动视图视图上,当我执行两指滚动时,我可以获得滚动视图的滚动事件,因为这是 iPadOS 13.4+ 内置的滚动视图,但我的自定义视图不是滚动视图,它里面只有一些可滚动的区域。)

我尝试过的事情:

  • UISwipeGestureRecognizer。不需要两指触控板滚动手势。
  • UIPanGestureRecognizer。没有。
  • 子类化 UIScrollView 并添加一个 UIScrollViewDelegate,只是为了看看它是否可以工作......没什么。
  • 子类化 GestureRecognizer 并添加它,然后覆盖 ShouldReceive(UIEvent evt) 但从未调用过。

iPadOS 13.4+ 将触控板双指滚动手势转换成什么?我可以把它当作某种事件吗?上面链接的文档是非常令人失望的准系统,但它提到了 UIEvent.EventType.scroll 但没有提到系统将如何、何时或何地使用该类型的事件调用我的任何方法。真气人。他们应该更清楚地说明这一点。

欢迎使用 Swift 或 C# 回答。

Jar*_*ike 5

好吧,奇怪的是我以为我尝试了 PanGestureRecognizer,但我一定是设置错了。Apple 的示例代码项目,将指针交互集成到你的 iPad 应用程序中有答案(C# 代码):

        panRecognizer = new UIPanGestureRecognizer(() => {
            Console.WriteLine("panned -- " + panRecognizer.VelocityInView(this));
        });
        panRecognizer.AllowedScrollTypesMask = UIScrollTypeMask.Continuous;
        AddGestureRecognizer(panRecognizer);
Run Code Online (Sandbox Code Playgroud)

很高兴我发现了这一点!