我尝试向 viewDidLoad 和 viewDidAppear 添加动画,但它不起作用:
- (void)viewDidAppear:(BOOL)animated{
[UIView beginAnimations:@"transition" context:NULL];
[UIView setAnimationTransition:110 forView:self.view cache:YES];
[UIView commitAnimations];
}
为什么?
我尝试向 viewDidLoad 和 viewDidAppear 添加动画,但它不起作用:
- (void)viewDidAppear:(BOOL)animated{
[UIView beginAnimations:@"transition" context:NULL];
[UIView setAnimationTransition:110 forView:self.view cache:YES];
[UIView commitAnimations];
}
为什么?
我有同样的问题,我想我找到了这个SO question的解决方案。
当 viewDidAppear 被调用时,您仍然在屏幕上看不到任何内容(尽管有名称),但您即将看到。然后你可以使用 performSelector:withDelay 或 NSTimer 来启动你的动画。延迟可以仅为 0.1,并且您的动画将在屏幕出现时播放。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"View did appear!");
[self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f];
}
- (void)animationCode {
// you animation code
}
你没有告诉视图它应该动画到哪个状态,所以它不会做任何事情。您需要在两者之间放置代码beginAnimations:context:
,commitAnimations
以更改视图的外观(例如,通过删除一个子视图并添加另一个子视图)。
你没有beginAnimations:
正确使用commitAnimations
。你应该在它们之间放置一些通常不会被动画化的东西:例如,self.view.alpha = 0.5
你会得到一个淡入淡出的效果。它们对不在它们之间的任何东西都没有影响。
到了viewDidAppear:
被调用的时候,你的观点,嗯……已经出现了。动画任何东西都为时已晚。你真正想做的是这样的:
- (void)showMyViewWithAnimation {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:110 forView:childView cache:YES];
[parentView addSubview:childView];
[UIView commitAnimations];
}
在上面的示例childView
中,您的示例中称为self.view
.
请写出过渡的名称;没人知道110是什么。这是不好的风格。</pedantry>