2017-06-28 22 views
0

我使用一个已知的动画给我们所有人,动画改变导航栏的背景图片以延迟时间将其从半透明(我将其设置为默认)改为(蓝色主题)。如何使用动画更改导航栏的背景图像?

UIView.animate(withDuration:0.5, 
       delay: 0, 
       option: UIViewAnimationOptions.curveEaseOut, 
       animations: { 
     self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
     self.navigationController?.navigationBar.shadowImage = UIImage() 
    }, completion: nil) 

但动画没有工作,但导航栏的背景图像改变成功,我不知道为什么!

任何想法?

+0

没有改变颜色的代码你刚才设置无图像的背景图像。 –

+0

@NiravD更新 –

回答

5

您需要在动画块内调用layoutIfNeeded(),例如

UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: { 
    self.navigationController?.navigationBar.barTintColor = .blue 
    self.navigationController?.navigationBar.layoutIfNeeded() 
}, completion: nil) 

更新更改背景图片

此代码为我工作:

let animation = CATransition() 
animation.duration = 0.5 
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) 
animation.type = kCATransitionFade 

navigationController?.navigationBar.layer.add(animation, forKey: nil) 

UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: { 
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "your-image-name"), for: .default) 
}, completion: nil) 
+0

谢谢,但没有发生任何事情。 ':( –

+1

您是否需要更改'backgroundImage'或者您是否可以像上述示例代码中那样更改颜色?我现在还没有时间进行调查,但这是针对此问题的明显Objective-C解决方案更改图像:https://stackoverflow.com/questions/10823068/how-can-i-animate-the-uinavigationbar-background-change-on-uiviewcontroller-push – Hodson

+0

'背景图像',和其他答案与目标-C没有工作! –