如果轻轻触摸,Force Touch 动画就会冻结

Posted

技术标签:

【中文标题】如果轻轻触摸,Force Touch 动画就会冻结【英文标题】:Force Touch animation freezes if gently touched 【发布时间】:2015-11-06 01:11:27 【问题描述】:

我已经在我的应用程序的聊天视图中实现了 Force Touch。当用户强制触摸其他用户的聊天消息气泡时,会显示他/她的个人资料。出于某种奇怪的原因,当轻轻按下消息气泡时,交互过渡卡住了,可见的只是应该逐步淘汰的视图的屏幕截图。

我也使用 View Hierarchy Debugger 调试了这个问题,UITransitionView 绝对是最顶层的视图。该应用程序不会崩溃 - 它仍在运行,用户仍然可以接收消息但不能查看它们,退出屏幕等,因为屏幕截图卡在顶部。

有人遇到过这样的问题吗?听起来像苹果的错误。

【问题讨论】:

也许你可以分享一些代码。你在使用 Apple 的 peek/pop API 吗? 你好@beyowulf。我将尝试使用示例项目复制该问题并将其发布在此处。是的,我正在使用 peek/pop API。 请在我的 Github 上查看示例项目:github.com/JinkProject/PeekPopBug 你找到解决办法了吗? @KlevisonMatias 不幸的是我没有。我已经在 Apple Developer 论坛中遇到并重新发布了这个问题,但成员和 Apple 工程师都没有回复或提出可行的解决方案。 【参考方案1】:

我找到了这个错误的原因。

如果您的视图控制器需要支持强制触摸预览,您需要通过调用将此视图控制器注册到委托

- (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate:(id<UIViewControllerPreviewingDelegate>)delegate 
    sourceView:(UIView *)sourceView NS_AVAILABLE_ios(9_0);

执行此操作的方法。

我只是突然调用这个函数两次(一次在超类中'viewDidLoad(),一次在子视图控制器中),当我在我的子视图控制器中删除一次时,此错误已修复!太棒了……

这仍然是 Apple 的错误,因为发生这种情况没有任何意义。但是,希望这个答案可以帮助和我有同样问题的开发者。

仅供参考。我只是浏览了你的 Github 代码,没有发现注册方法的双重调用。这个错误可能还有其他原因。您可以尝试在UITableViewController 的子类中删除注册方法。顺便说一句,当视图控制器使用 ComponentKit 时,我会重现此问题。

【讨论】:

以上是关于如果轻轻触摸,Force Touch 动画就会冻结的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Touch App 在多点触控/Android 时冻结

如何在不丢失触摸事件的情况下冻结 UIScrollView 滚动

响应触摸的动画(简单形状)的最佳方式是啥?

查明 Mac 是不是支持 Force Touch

vue怎么解决在ios上屏幕滚动的问题

查找在 iphone 中设置动画时触摸子视图的时间?