我正在实现自定义包含视图控制器。子VC是导航控制器,全屏。要执行我正在使用的转换/动画:
// controller hierarchy setup
parentVC.addChildViewController(targetVC)
currentVC.willMoveToParentViewController(nil)
// position target
targetVC.view.frame = currentVC.view.frame
targetVC.view.autoresizingMask = .FlexibleHeight | .FlexibleWidth
// swap em
parentVC.transitionFromViewController(currentVC, toViewController: targetVC, duration: 0.3, options: .TransitionCrossDissolve, animations: {}) { (finished) -> Void in
// controller hierarchy complete
self.currentVC.removeFromParentViewController()
self.targetVC.didMoveToParentViewController(self.parentVC)
}
它的工作正常,但导航栏会在动画完成之前重置状态栏,此时它会以额外的20px高度弹出。
由于在动画之前设置了帧,并且动画不影响帧,我不知道......有什么想法吗?
答案 0 :(得分:2)
通过放弃transitionFromViewCon...
并使用UIView的animateWithDuration
,我获得了预期的效果。似乎想弄清楚如何坚持使用transitionFromViewCon...
是理想的,但我现在就推出这个。
// controller hierarchy setup
parentVC.addChildViewController(targetVC)
currentVC.willMoveToParentViewController(nil)
// position target
targetVC.view.alpha = 0
parentVC.view.addSubview(targetVC.view)
// swap em
UIView.animateWithDuration(0.3, animations: { () -> Void in
// crossfade
self.targetVC.view.alpha = 1
self.currentVC.view.alpha = 0
}, { (finished) -> Void in
self.currentVC.view.removeFromSuperview()
// controller hierarchy complete
self.currentVC.removeFromParentViewController()
self.targetVC.didMoveToParentViewController(self.parentVC)
})