为UINavigationBar的barTintColor设置动画

rpo*_*ell 6 objective-c uinavigationbar uinavigationcontroller ios7

我正在努力的应用程序barTintColor在推送新的视图控制器时更改其导航栏.现在我们在目标视图控制器的viewWillAppear:方法中设置了这种颜色,但是我们遇到了一些问题.

按照我们现在这样做的方式,导航栏的颜色突然变化,而其余的条形内容像往常一样动画.我喜欢的是酒吧在源颜色和目标颜色之间淡入淡出.有没有办法用公共Cocoa Touch API实现这一目标?

小智 17

您可以使用UIViewControllerTransitionCoordinator添加与视图控制器转换的时序和动画曲线相匹配的额外动画.

视图控制器的transitionCoordinator将被设置后视图控制器的动画已经开始(因此在viewWillAppear所呈现的视图控制器).animateAlongsideTransition:completion:在转换协调器上添加任何额外的动画.

一个例子:

[[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
    self.navigationController.navigationBar.translucent = NO;
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)

  • 这在iOS10中适用于我在推送期间而不是pop(对于pop,它在pop动画之后直接切换颜色) (5认同)