当带有可见导航栏的视图控制器("我的音乐"视图控制器)具有带透明导航栏的视图控制器时,Apple Music应用程序有一个很好的转换(艺术家的视图控制器)推到堆栈。
我希望自己重新创造这种转变。
我已使用以下代码将导航栏设置为透明:
private func _setNavigationBarVisible(isVisible isVisible: Bool)
{
title = nil
/*
Update the navigation bar's visibility.
Create a helper method to prevent running the same code twice.
*/
func _updateNavigationBarVisibility(isVisible isVisible: Bool, userViewController: UserViewController?)
{
// Create a dummy navigation bar we can rip the default values out of if it should be visible
let navigationBar = UINavigationBar()
let backgroundImage = isVisible ? navigationBar.backgroundImageForBarMetrics(.Default) : UIImage()
let shadowImage = isVisible ? navigationBar.shadowImage : UIImage()
userViewController?.navigationController?.navigationBar.setBackgroundImage(backgroundImage,
forBarMetrics: .Default)
userViewController?.navigationController?.navigationBar.shadowImage = shadowImage
}
// Animate alongside the view controller's presentation transition if there is one
let isTransitionAnimationRun = transitionCoordinator()?.animateAlongsideTransition({ [weak self] context in
_updateNavigationBarVisibility(isVisible: isVisible, userViewController: self)
}, completion: nil)
// Or just update the values if there's no transition
if isTransitionAnimationRun == false
{
_updateNavigationBarVisibility(isVisible: isVisible, userViewController: self)
}
}
此功能在我的viewWillAppear:
和viewWillDisappear:
方法中运行,分别将false
和true
传递给isVisible
参数。
这段代码确实达到了类似的效果,但是尽管代码做了它应该做的事情,我想要一个不同的效果。
目前,此代码为阴影图像设置动画,使其在两个视图控制器上都可见,而不是像Apple Music那样,只有呈现它的人才能拥有阴影。对于背景图像,可以看到"滑动"动画作为导航栏的背景动画从透明到半透明。
我正在查看滑动手势的问题,但目前如果在滑动手势期间您将手指放在一个位置,因此不会发生滑动然后抬起手指,导航栏会更新为虽然滑动完成了,但是视图控制器变得很奇怪,尽管使用了完全可用的导航栏,但是堆栈永远不会被推或弹出。