我正在设计一个swift的iOS应用程序,并且在控制器转换期间我有一些动画难度。具体来说,我已经实现了一个UINavigationControllerDelegate,来监听某个视图何时被推送。当这个视图被按下时,我想隐藏屏幕底部的一个条。我的代码几乎完美地工作,但是无论何时我在导航控制器的高度上开始动画时,当前视图(正在被删除)正确地为其高度设置了动画,但是正在被推送的新控制器已经从动画。把一些代码,执行下面的功能是从我UINavigationControllerDelegate的willShow的viewController函数调用:在控制器转换期间动画UINavigationController高度
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
不知道我是否正确理解你的问题,但我会使用UIViewControllerAnimatedTransitioning:隐藏你正在转换的视图控制器的导航栏,重新创建并将其添加到上下文中,将其高度动画为当动画结束时,将其从上下文中移除并取消隐藏目标控制器的导航栏。它在用户眼中似乎都是无缝的 – cyril
所以,我不想对导航栏做任何事情,因为我只是推送到导航控制器,所以新视图没有导航栏。我遇到的问题是,当一个UINavigationController的高度在视图被推到它之前动画时,被推送到导航控制器的视图的高度具有未来的动画高度,而不是被限制到其包含的导航的底部控制器。我不想从这个故事板过渡,只是将视图推向其中的导航控制器。 – Jtvd78