我目前正在使用一个交互式视图,该视图在很大程度上取决于用户的触摸位置。我发现有几种方法可以在UITapGestureRecognizer
打开时与VoiceOver
进行交互,但是当我轻按我的观点时,给出的值是非常错误的。我已经看过其他地方了,但是我的用例不在规范范围内,所以没有太多可以告诉我发生了什么事。有谁之前经历过这个吗?
我知道我可以将accessibilityTrait
更改为UIAccessibilityTraitAllowsDirectInteraction
,这将在使用时为我提供正确的屏幕显示,但是我至少想知道是什么原因导致了此问题知识。要与UITapGestureRecognizer
进行交互,我可以双击或通过在屏幕上用力按压来进行3D触摸。阶梯方法不适用于轻击手势,但适用于平移手势。
这是我用来获取屏幕显示点的唯一一行。我的地图视图是UIImageView
CGPoint screenPoint = [tapGesture locationInView:map];
我正在使用建筑物的地图,并尝试点击相同的角或地标进行测试。我知道我每次都无法击中相同的精确点,但是我确实使用了手写笔,所以我可以很接近。
如果没有VoiceOver,我将得到结果:(35.500,154.363)
在启用VoiceOver并点击大致相同的位置时,我会得到(187.500,197.682)
我要测试的点在屏幕的左侧,而VoiceOver启用的结果在屏幕的中间。我相信y轴值可能由于我的工具栏的大小而发生了变化,但是我不知道x轴值有什么问题。如果需要更多信息,请告诉我。
更新:经过进一步调查,结果显示UITapGestureRecognizer
将始终返回(187.500,197.682),无论我在VoiceOver启用时在地图视图中的何处触摸。该点似乎在地图视图的中间。不过奇怪的是,如果在VoiceOver开启时使用3D触摸,UIPanGestureRecognizer
将为我提供正确的视图(x,y)。
在与当前问题无关的旁注中,似乎如果我使用可访问性特征UIAccessibilityTraitAllowsDirectInteraction
,则方法UIAccessibilityConvertFrameToScreenCoordinates
返回的帧会比我的视图高。如果我不改变特质,效果很好。
答案 0 :(得分:0)
您的问题可能与 VoiceOver 启用时使用的参考点有关。 验证点坐标所指的是:视图坐标还是屏幕坐标?
我建议您看一下以下元素:
根据您的项目,前面的元素可能很有趣,可以达到您的目的。