Force Touch 动画在轻触时会冻结

7
我在聊天界面中实现了Force Touch功能。当用户按压其他用户的聊天气泡时,会呈现该用户的个人资料。但出现了一个奇怪的问题,当轻触聊天气泡时,交互式过渡会卡住,只能看到应该被淡出的视图屏幕截图。我使用View Hierarchy Debugger调试过这个问题,并且确认UITransitionView是最顶层的视图。应用程序不会崩溃——它仍在运行,用户仍然可以接收消息,但由于顶部的屏幕截图,无法查看消息、退出屏幕等。有人遇到过类似的问题吗?听起来像是苹果的bug。

也许你可以分享一些代码。你是否正在使用苹果的peek/pop API? - beyowulf
你好 @beyowulf。我会尝试使用示例项目复制该问题并在此处发布。是的,我正在使用 peek/pop API。 - Stephen Paul
请在我的Github上查看示例项目:https://github.com/JinkProject/PeekPopBug - Stephen Paul
你找到解决方案了吗? - Klevison
很遗憾,我没有。我已经在苹果开发者论坛上发布了这个问题,并且既没有会员回复,也没有苹果工程师提出可行的解决方案。 - Stephen Paul
1个回答

0
我找到了这个错误的原因。
如果你的视图控制器需要支持3D Touch预览,你需要通过调用委托来注册该视图控制器。
- (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate:(id<UIViewControllerPreviewingDelegate>)delegate 
    sourceView:(UIView *)sourceView NS_AVAILABLE_IOS(9_0);

实现此方法的方式。

我刚刚突然调用了这个函数两次(一次在超类的viewDidLoad()中,一次在子视图控制器中),当我在我的子视图控制器中删除一次时,这个错误就被修复了!太神奇了...

这仍然是一个苹果的bug,因为它没有任何意义。但是,希望这个答案可以帮助遇到同样问题的开发者。

顺便说一下,我刚刚浏览了你的Github代码,没有发现注册方法有重复调用。也许这个bug还有其他原因。你可以尝试在你的UITableViewController的子类中删除注册方法。另外,我在一个视图控制器使用ComponentKit时也复现了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接