在 iOS 7 中维护导航动画
Posted
技术标签:
【中文标题】在 iOS 7 中维护导航动画【英文标题】:Maintaining navigation animation in iOS 7 【发布时间】:2013-10-21 19:19:52 【问题描述】:ios 中的UITableViewController
包含一个用于行选择的微妙动画,在返回视图时(通过后退按钮),先前选择的行会短暂突出显示。这为用户提供了应用中的位置感。
对于UIViewController
s,这种行为不是免费的。包含的简单方法是手动取消选择viewWillAppear
中的选定行。
但是,iOS 7 允许用户在导航堆栈中向后“拖动”。部分拖动但未完成拖动操作将触发viewWillAppear
并取消选择该行。当用户真实返回时,该行没有被选中。
使用viewDidAppear
肯定会解决这个问题,但动画是稍后触发的(很明显),让应用感觉迟钝。
有没有人想出办法解决这个问题?
【问题讨论】:
【参考方案1】:我自己一直在考虑解决方案。例如,当您查看本机邮件应用程序实现的行为时,如果您单击后退按钮,取消选择动画在viewDidAppear
之前开始,但它也不在viewWillAppear
中,因为那时动画非常快并且不以交互方式关闭时突然。但是,当您在viewWillAppear
上以交互方式关闭和取消选择时,单元格会随着手指手势逐渐取消选择,就像本机邮件应用程序一样。似乎viewWillAppear
在动画块内部被调用。
通过实验,viewWillAppear
中的performSelector:@selector(deselect) afterDelay:0
在单击返回动画时会产生所需的动画。
总结一下,当用户点击返回按钮时:performSelector:@selector(deselect) afterDelay:0
in viewWillAppear
;当用户交互滑动以关闭时,deselect
in viewWillAppear
。
那么如何区分这两种情况呢? viewWillAppear
中的信息肯定不够。
现在,可以实现导航控制器委托方法,向表格视图控制器发出一个交互式弹出即将开始的信号(在viewWillAppear
之前),然后将其交给Apple 的常规交互式弹出交互控制器。捕获? _interactionController
是私有 API。傻傻的苹果。
然后我发现您可以将UINavigationController
提供给它的interactivePopGestureRecognizer
。所以你可以坐在中间,听委托方法,给你的表格视图控制器发信号,并为手势识别器调用苹果的委托实现。
这应该足以让您继续前进。可能是UITableViewController
上面的一个可选协议和类别,然后测试弹出到表视图控制器实例是否响应信号方法。当然也可以是子类。
【讨论】:
以上是关于在 iOS 7 中维护导航动画的主要内容,如果未能解决你的问题,请参考以下文章