Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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
Ios UIP高分辨率设备上的检测识别器点_Ios_Uigesturerecognizer - Fatal编程技术网

Ios UIP高分辨率设备上的检测识别器点

Ios UIP高分辨率设备上的检测识别器点,ios,uigesturerecognizer,Ios,Uigesturerecognizer,在iOS应用程序的几个地方,我们使用手势识别器以交互方式消除视图。这个过程非常简单,我们跟踪用户手指的移动,并用它移动视图 在最近的iOS设备上,这一功能运行得非常好,但我们注意到,在iPhone X等分辨率更高的设备上,屏幕显示比例为3倍,刷新速度非常快,手势不再像应有的那样平滑 我认为这是因为UIgestureRecognitizer类返回-locationInView:的整点值,因此当交互速度较慢时,我们实际上一次移动视图3个像素,这在如此高质量的显示上是显而易见的 我对iOS的早期版本持

在iOS应用程序的几个地方,我们使用手势识别器以交互方式消除视图。这个过程非常简单,我们跟踪用户手指的移动,并用它移动视图

在最近的iOS设备上,这一功能运行得非常好,但我们注意到,在iPhone X等分辨率更高的设备上,屏幕显示比例为3倍,刷新速度非常快,手势不再像应有的那样平滑

我认为这是因为
UIgestureRecognitizer
类返回
-locationInView:
的整点值,因此当交互速度较慢时,我们实际上一次移动视图3个像素,这在如此高质量的显示上是显而易见的

我对iOS的早期版本持肯定态度,这些分数有时会以精确的分数表示。现在似乎不再是这样了


有人对如何改善这种行为有什么建议吗?

肯定还有其他原因。在运行iOS 11.2.5的iPhoneX上,我从平移手势识别器接收到分数坐标(增量为1/3,正如您所期望的那样)

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else { return }

    if let coalesced = event?.coalescedTouches(for: touch), coalesced.count > 0 {
        // process all of the `coalesced` touches
    } else {
        // just process `touch`
    }
}

已经说过,你可以考虑使用<代码>触摸开始> <代码> <代码>触摸移动< /代码>等,然后使用它,可以提供更高频率的触摸信息(在我的iPhone X上,融合触摸每秒返回120次触摸,而不是从PAN手势识别器每秒60次触摸)。

override func touchesMoved(touch:Set,带有事件:UIEvent?){
guard let touch=touch.first else{return}
如果let coalesced=event?.coalescedTouches(for:touch),coalesced.count>0{
//处理所有“合并”的接触
}否则{
//只需触摸`
}
}
但在担心这一点之前,请提供一个简单的、独立的、体现您所描述问题的方法。确保问题真的是手势识别器,而不是延迟,例如,延迟会导致每次触摸时尝试执行的操作的复杂性


顺便说一句,联合接触有助于解决接收接触不够频繁的问题。如果你有一个落后的问题,你可以考虑哪些可以用来减少这种影响。

< P>这是一个奇怪的问题。多亏了罗布的信息和他声称得到分数坐标的说法,我开始挖掘更多的东西

事实证明,当我们使用
uigesturecognizer
子类(只允许在一个特定方向上平移)时,问题就显而易见了

子类“
-(void)touchesMoved:…
中接收到的坐标实际上是分数。不知何故,在识别器的操作回调中使用
-(CGPoint)locationInView:
,只会报告整个值。除了存储
-(void)touchesMoved…
中接收到的最新值并在操作回调中读取之外,我无法找到任何方法来解决此异常

还感谢Rob关于合并触摸的建议,这是我将来要研究的问题