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