Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何创建对角滚动的滚轮事件?_Objective C_Macos_Scroll_Macos Sierra_Cgeventtap - Fatal编程技术网

Objective c 如何创建对角滚动的滚轮事件?

Objective c 如何创建对角滚动的滚轮事件?,objective-c,macos,scroll,macos-sierra,cgeventtap,Objective C,Macos,Scroll,Macos Sierra,Cgeventtap,文档对此非常吝啬,但是从我在网上收集的信息来看,车轮数量应该是1个Y-only,2个Y-X,3个Y-X-Z 据我所知,在CGEventCreateScrollWheelEvent中设置wheelCount=2应该同时滚动x和y 10个像素,但下一段代码在某些应用程序(Chrome、Safari)中仅向上滚动10个像素,而在其他应用程序(预览、Firefox)中则同时滚动两个轴: CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL,

文档对此非常吝啬,但是从我在网上收集的信息来看,车轮数量应该是1个Y-only,2个Y-X,3个Y-X-Z

据我所知,在
CGEventCreateScrollWheelEvent
中设置wheelCount=2应该同时滚动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中打开放大的图片。 预览时,在触摸板上对角滑动两个手指将创建一个平滑的x&y滚动。在Safari或Chrome中执行同样的操作只会导致X或Y被滚动,并且通常会感觉被破坏

我发现了一个与此相关的,以“不会修复”结尾的。我不明白为什么

如果能更好地解释为什么会发生这种情况,那就太好了


感谢

使用Redominantaxis滚动
描述了这种现象:

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

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

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


在具有WebView的测试应用程序中,滚动视图的
使用滚动轴滚动
为是。将其设置为“否”可解决问题。

仅针对协议:1。您是否尝试将增量转换为
uint32\t
?2.你从刚刚创建的事件中读出属性了吗?我读出了。我将对问题进行编辑以澄清这一点。您是如何使用Xcode编辑器进行测试的?试试Finder窗口。Finder窗口是Chrome\Safari\Firefox\Preview中放大的大型图像。所有的结果都是一样的。我认为这与我的行为有关。在具有WebView的测试应用程序中,滚动视图的
使用滚动轴滚动
为是。将其设置为“否”可修复此问题。