1

文档对此真的很吝啬,但从我在网上收集的信息来看,wheelCount 应该是 1 仅用于 Y,2 用于 YX,3 用于 YXZ。

据我了解,设置 wheelCount = 2 内部CGEventCreateScrollWheelEvent应将 x 和 y 滚动 10 像素,但下一段代码滚动,在某些应用程序(Chrome、Safari)中仅向上滚动 10 像素,而在其他应用程序(预览版、Firefox)中滚动两个轴:

    CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL,
                                                  kCGScrollEventUnitPixel,
                                                  (uint32_t)2,(int32_t)10,
                                                  (int32_t)10);
    CGEventPost(kCGHIDEventTap, scroll);

    // Verify deltas

    int64_t deltaAxis1 = CGEventGetIntegerValueField(scroll, kCGScrollWheelEventPointDeltaAxis1);
    int64_t deltaAxis2 = CGEventGetIntegerValueField(scroll, kCGScrollWheelEventPointDeltaAxis2);

    NSLog(@"kCGScrollWheelEventPointDeltaAxis1: %lld",deltaAxis1); //kCGScrollWheelEventPointDeltaAxis1: 10
    NSLog(@"kCGScrollWheelEventPointDeltaAxis2: %lld",deltaAxis2); //kCGScrollWheelEventPointDeltaAxis2: 10

    CFRelease(scroll);

链接到文档

更新:经过一番挖掘,似乎有些应用程序不知道如何解释多轮滚动并且只滚动 x 或 y。

这可以使用上面的代码或 Macbook 触控板轻松重现:

在预览和 Safari 中打开放大的图片。在预览中,在触控板上对角滑动 2 根手指将创建一个非常平滑的 x&y 滚动。在 Safari 或 Chrome 中执行相同操作只会导致 X 或 Y 被滚动,并且总体上会感觉损坏。

我发现了一个与此相关的Chrome 错误,该错误已以“无法修复”关闭。无法理解为什么。

关于为什么会发生这种情况的任何更好的解释都会很棒。

谢谢

4

1 回答 1

1

usesPredominantAxisScrolling描述现象:

一些内容在水平轴和垂直轴上都是可滚动的,但主要是一次滚动一个轴。其他内容(例如绘图画布)应在两个轴上自由滚动。

传统上这不是滚轮的问题,因为它们一次只能向一个方向滚动。使用滚动球和触摸表面,确定用户的意图变得更加困难。

此属性通过指定是否存在内容的主要滚动轴来帮助滚动视图确定用户的意图。

在带有 WebView 的测试应用程序usesPredominantAxisScrolling中,滚动视图为 YES。将其设置为 NO 可以解决问题。

于 2017-07-12T11:29:40.967 回答