我正在设计一个
swift的iOS应用程序,我在控制器转换期间遇到动画困难.具体来说,我已经实现了一个UINavigationControllerDelegate,用于监听推送某个视图的时间.按下此视图时,我想隐藏屏幕底部的一个栏.我的代码几乎完美地运行,但是每当我在导航控制器的高度上开始动画时,当前视图(正被删除)正确地设置其高度的动画,但是被推动的新控制器已经具有新的高度.动画.要为它添加一些代码,从我的UINavigationControllerDelegate的willShow viewController函数调用以下函数:
func animatePlayerVisibility(_ visible: Bool) { if visible == showingPlayer { return } showingPlayer = visible let height: CGFloat = visible ? 56.0 : 0.0 self.view.layoutIfNeeded() UIView.animate(withDuration: 0.35) { self.playerHeight.constant = height self.viewBottom.constant = height self.view.layoutIfNeeded() } }
‘playerHeight’是对玩家容器视图高度的约束的IBOutlet. ‘viewBottom’也是顶部容器视图底部和屏幕底部之间的IBOutlet约束.基本上,只要这两个约束一起动画,它应该看起来不错.
为了帮助可视化图形错误,我编辑了这一行
self.viewBottom.constant = height
至
self.viewBottom.constant = height * 2.0
我创建了一张imgur专辑,其中列出了实际的错误行为:
http://imgur.com/a/znAim
如您所见,当新控制器已具有新的动画大小时,旧视图控制器会正常动画.
任何帮助将非常感激.我一直试图解决这个问题一段时间没有成功.
编辑:未应用* 2的动画视图.
https://imgur.com/a/2a5Sw