每当我向外滑动我的iMessage应用程序打开另一个iMessage应用程序,然后向后滑动回到我的iMessage应用程序时,我的iMessage应用程序就会再次加载。
甚至MessagesViewController的viewDidLoad也会再次被调用。
我的MessagesViewController代码看起来像这样-
class MessagesViewController: MSMessagesAppViewController {
override func viewDidLoad() {
super.viewDidLoad()
openSuitableController()
}
override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
removeAllChildViewControllers()
}
override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
openSuitableController()
}
}在openSuitableController中,我只需向MessagesViewController添加一个childViewController。
因为应用程序会重新启动,所以collectionView会加载并滚动到顶部,这会导致闪烁。
如果您需要更多信息,请发表评论。
PS:我添加了Objective-C标签,因为我不认为这个问题是由于特定的语言造成的。
发布于 2017-10-20 19:17:25
我相信这是不可避免的,也是iMessage管理其托管的iMessage应用程序的方式。例如:当你向外滑动时,iMessage框架会关闭你的应用程序,并启动你向内滑动的下一个应用程序。对于iOS 11和更早的版本,这一点是正确的,当然,在未来可能会发生变化。
通过将UI嵌入到自己的沙盒容器视图控制器层次结构中,iMessage有一种相当复杂的方式来呈现UI,这是为了确保iMessage本身与私人聊天数据和应用程序之间的安全信任边界。因此,呈现你的应用程序比你的应用程序自己启动会有更多的开销,我猜应用程序会像这样重新启动,以最小化资源使用并保护iMessage不会耗尽它所需的资源。
让你的应用程序尽可能快地启动是值得的(例如,通过限制动态库加载时间),并记住当你的初始内容被替换为存储的快照时会是什么样子。
我认为最大限度地减少应用程序启动和停止时所做的工作是非常重要的,这样才能在应用程序之间实现最平滑的过渡。
当你刷出一个应用程序到另一个应用程序时,iMessage会生成之前UI状态的快照图像,然后在滑动回到你的应用程序时,它会在你的应用程序进行初始化时显示该快照。
因此,仔细查看快照过程,并尝试确保您的初始UI表示将从iMessage框架生成的快照中很好地过渡,这是值得的。
https://stackoverflow.com/questions/46784253
复制相似问题