动画导航栏标题文本更改

Jor*_*n H 15 animation objective-c uinavigationbar uiviewanimation ios

在我的应用程序中,我有一个页面视图控制器,允许用户在应用程序的不同"部分"之间滑动,并在导航栏的顶部我将标题文本更改为用户通过刷过的新部分pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:.当动画完成时,它当前正在立即更改标题文本.我想通过一些动画改进这一点,一种微妙的淡入淡出效果.

我首先尝试实现[UIView animationWithDuration:...]动画更改标题文本,但它不动画,只是仍然立即更新.

然后我想知道是否有可能更新导航栏标题的alpha,因为用户根据他们滚动的距离水平滚动,当下一部分即将出现在屏幕上时达到0 alpha,然后我可以立即在文本处于0时更改文本,然后快速淡入1 alpha.但是UIPageViewControllerDelegate当滚动位置更新时,我没有看到调用方法.

如果可能的话,我不仅可以淡入淡出,而且可以在导航栏中移动标题文本位置,就像通过滑动手势从推送segue导航回来时发生的默认动画一样.当用户滚动并在另一侧提供下一部分标题时,我会将旧部分标题滑过,这样当转换完成时,前一部分标题不在屏幕上,新的标题完全居中,因此替换完成.但同样需要确切知道用​​户滚动页面视图控制器的程度.

是否可以实现任何所需的动画?

Ash*_*lls 46

如果要在不同的标题字符串之间设置动画,请使用以下命令:

CATransition *fadeTextAnimation = [CATransition animation];
fadeTextAnimation.duration = 0.5;
fadeTextAnimation.type = kCATransitionFade;

[self.navigationController.navigationBar.layer addAnimation: fadeTextAnimation forKey: @"fadeText"];
self.navigationItem.title = "My new title";
Run Code Online (Sandbox Code Playgroud)

当然,您可以调整持续时间并设置计时功能.

还有其他类型的动画可能在不同的情况下工作(感谢@inorganik):

kCATransitionFade
kCATransitionMoveIn
kCATransitionPush
kCATransitionReveal
Run Code Online (Sandbox Code Playgroud)


Fre*_*orf 37

为方便起见,Ashley Mills在Swift中的解决方案:

11/16/2016更新了Swift 3(感谢n13)

let fadeTextAnimation = CATransition()
fadeTextAnimation.duration = 0.5
fadeTextAnimation.type = .fade

navigationController?.navigationBar.layer.add(fadeTextAnimation, forKey: "fadeText")
navigationItem.title = "test 123"
Run Code Online (Sandbox Code Playgroud)

Swift 2.x

let fadeTextAnimation = CATransition()
fadeTextAnimation.duration = 0.5
fadeTextAnimation.type = kCATransitionFade

navigationController?.navigationBar.layer.add(fadeTextAnimat??ion, forKey: "fadeText")
navigationItem.title = "test 123"
Run Code Online (Sandbox Code Playgroud)

我把自己的帽子交给阿什利!