7

我尝试向 viewDidLoad 和 viewDidAppear 添加动画,但它不起作用:

- (void)viewDidAppear:(BOOL)animated{
 [UIView beginAnimations:@"transition" context:NULL];
 [UIView setAnimationTransition:110 forView:self.view cache:YES];
 [UIView commitAnimations];
}

为什么?

4

3 回答 3

24

我有同样的问题,我想我找到了这个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
}
于 2011-02-05T16:58:24.430 回答
0

你没有告诉视图它应该动画到哪个状态,所以它不会做任何事情。您需要在两者之间放置代码beginAnimations:context:commitAnimations以更改视图的外观(例如,通过删除一个子视图并添加另一个子视图)。

于 2010-02-02T23:57:14.560 回答
0
  1. 你没有beginAnimations:正确使用commitAnimations。你应该在它们之间放置一些通常不会被动画化的东西:例如,self.view.alpha = 0.5你会得到一个淡入淡出的效果。它们对不在它们之间的任何东西都没有影响。

  2. 到了viewDidAppear:被调用的时候,你的观点,嗯……已经出现了。动画任何东西都为时已晚。你真正想做的是这样的:

    - (void)showMyViewWithAnimation {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationTransition:110 forView:childView cache:YES];
        [parentView addSubview:childView];
        [UIView commitAnimations];
    }
    

    在上面的示例childView中,您的示例中称为self.view.

  3. 请写出过渡的名称;没人知道110是什么。这是不好的风格。</pedantry>

于 2010-02-03T09:01:38.703 回答