在我们的 iOS 应用程序的几个地方,我们使用手势识别器以交互方式关闭 View 。这个过程非常简单,我们跟踪用户手指的移动,并随之移动 View 。
在最近的 iOS 设备上,这种方法运行良好,但我们注意到在 iPhone X 等分辨率更高的设备上,显示比例为 3 倍,并且刷新速度非常快,手势不再像应有的那样流畅是。
我认为这是由于 UIGestureRecognizer
类正在返回 -locationInView:
的整点值,所以当交互缓慢时,我们实际上是在移动一次查看 3 个像素,这在如此高质量的显示器上是显而易见的。
与早期版本的 iOS 相比,我很肯定这些点有时会以准确的分数值形式报告以确保精度。这似乎不再是这种情况了。
有没有人对如何改善这种行为有任何建议?
最佳答案
一定有其他事情发生了。在运行 iOS 11.2.5 的 iPhone X 上,我从平移手势识别器接收小数坐标(正如您所期望的那样以 1/3 为增量)。
话虽如此,你可以考虑使用touchesBegan
、touchesMoved
等,然后使用coalesced touches ,它可以提供更高频率的触摸信息(在我的 iPhone X 上,合并触摸每秒返回 120 次触摸,而不是平移手势识别器每秒返回 60 次触摸)。
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`
}
}
但在担心之前,请提供一个简单、独立的 MCVE这体现了你描述的问题。确保问题确实出在手势识别器上,而不是例如导致您尝试在每次触摸时执行的操作变得复杂的延迟。
顺便说一句,联合触摸有助于解决接收触摸不够频繁的问题。如果你有卡顿问题,可以考虑predictive touches可以用来减少这种影响。
关于ios - 高分辨率设备上的 UIPanGestureRecognizer 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48678039/