6

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

我使用 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# 回答。

4

1 回答 1

5

好的,奇怪的是我以为我尝试了 PanGestureRecognizer,但我一定是设置错了。Apple 的示例代码项目,Integrating Pointer Interactions into Your iPad App有答案(C# 代码):

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

很高兴我发现了这一点!

于 2020-05-17T00:49:18.930 回答