将视图控制器推入堆栈

时间:2016-05-13 14:12:26

标签: uiviewcontroller uinavigationcontroller uikit uinavigationbar

当带有可见导航栏的视图控制器("我的音乐"视图控制器)具有带透明导航栏的视图控制器时,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:方法中运行,分别将falsetrue传递给isVisible参数。

这段代码确实达到了类似的效果,但是尽管代码做了它应该做的事情,我想要一个不同的效果。

目前,此代码为阴影图像设置动画,使其在两个视图控制器上都可见,而不是像Apple Music那样,只有呈现它的人才能拥有阴影。对于背景图像,可以看到"滑动"动画作为导航栏的背景动画从透明到半透明。

我正在查看滑动手势的问题,但目前如果在滑动手势期间您将手指放在一个位置,因此不会发生滑动然后抬起手指,导航栏会更新为虽然滑动完成了,但是视图控制器变得很奇怪,尽管使用了完全可用的导航栏,但是堆栈永远不会被推或弹出。

0 个答案:

没有答案