我正在开发一个向下钻取三个步骤的导航系统,然后让你用箭头导航内容,这些箭头实际上只是改变了该视图的内容,所以从技术上讲,导航控制器没有接收任何弹出/推动,因此我一做一个
self.navigationItem.title = [[[self.symbol valueForKey:@"section_title"] uppercaseString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
标题会改变,因为显而易见的原因并没有动画。
有没有办法强制它动画,好像弹出/推动动作一样? 类似的东西:
self.navigationItem.direction = NavigationDirectionLeft;
self.navigationItem.title = @"Whatevah!";
这样一旦标题改变,它就会使旧标题淡出 在从左到右的过渡中,标题淡入,或 更好的方式新标题在从左到右进入时逐渐消失 从左侧
[仅供参考不需要支持5.0之前的ios版本,所以只有5.0> :)]
答案 0 :(得分:2)
好的,这不是一个完美的解决方案,但可能会给你一个起点:
导航栏标题之间的淡入淡出非常简单:
CATransition *fade = [CATransition animation];
fade.type = kCATransitionFade;
fade.duration = 2.0;
[self.navigationController.navigationBar.layer addAnimation: fade forKey: @"fadeText"];
self.navigationItem.title = "new Title";
还有其他类型的"开箱即用"您可以使用过渡来为标题的位置设置动画,例如:
CATransition *push = [CATransition animation];
push.duration = 2.0;
push.type = kCATransitionPush;
push.subtype = kCATransitionFromRight;
[self.navigationController.navigationBar.layer addAnimation: push forKey: @"pushText"];
self.navigationItem.title = "new Title";
这个问题是整个导航栏移动了。要解决此问题,您需要在导航栏的子视图中找到标题标签的图层。此视图层次结构是私有的,因此您不应该将此代码提交到商店,但就像我说的那样......这可能会给您一个起点。
CATransition *fade = [CATransition animation];
fade.type = kCATransitionFade;
fade.duration = 2.0;
CATransition *move = [CATransition animation];
move.duration = 2.0;
move.type = kCATransitionMoveIn;
move.subtype = kCATransitionFromRight;
UILabel * navBarTitleLabel;
for (UIView * view in self.navigationController.navigationBar.subviews) {
if ([NSStringFromClass(view.class) isEqualToString: @"UINavigationItemView"]) {
navBarTitleLabel = view.subviews.firstObject;
break;
}
}
[navBarTitleLabel.layer addAnimation: fade forKey: @"fadeText"];
[navBarTitleLabel.layer addAnimation: move forKey: @"moveText"];
self.navigationItem.title = newTitle;
您可能会发现,一旦他们完成,您需要removeAllAnimations
。我没有机会全力测试它。
答案 1 :(得分:1)
尝试将UIView
设为self.navigationItem.titleView
,然后创建UILabel
并将其添加为标题。当您想要制作动画时,请在此UIView
上为此标签设置动画,并添加新的UILabel
并为其替换动画以替换它。您可以使用一些基于块的动画。
例如: -
[UIView animateWithDuration:0.5
delay:1.0
options: UIViewAnimationCurveEaseOut
animations:^{
label.frame = labelFrame;
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];