2012-05-18 42 views
4

我有一些动画会在加载根视图控制器时自动启动。这些动画包含在viewDidLoad中。当我导航到我的下一个视图控制器并返回到根视图控制器时,所有动画都停止了。当我按“home”按钮然后返回到视图时,会发生相同的行为。动画在视图控制器之间移动时不会重新启动

我确定我在这里错过了一些非常基本的东西,但会很感激任何帮助。谢谢。

编辑1

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self beeBobbing]; 
    //animate the butterfly oscillating 
    [self butterflyOscillate]; 

} 

-(void) beeBobbing 
{ 
    [UIView animateWithDuration:1.0f delay:0 options:(UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionAllowUserInteraction) animations:^{ 
     CGPoint bottomPoint = CGPointMake(215.0, 380.0); 
     imgBee.center = bottomPoint; 
    } completion:^(BOOL finished) { 

    }]; 

} 

编辑2:这种类型的动画似乎视图之间切换时重新启动:

-(void) animateClouds 
{ 
    [UIView animateWithDuration:30.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ 
     CGPoint leftScreenCenter = CGPointMake(-420.0, 119.0); 
     imgClouds.center = leftScreenCenter; 
    } completion:^(BOOL finished) { 
     CGPoint rightScreenCenter = CGPointMake(1450.0, 119.0); 
     imgClouds.center = rightScreenCenter; 
     [UIView animateWithDuration:40.0f delay:0 options: (UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat) animations:^{ 
      CGPoint leftScreenCenter = CGPointMake(-420.0, 119.0); 
      imgClouds.center = leftScreenCenter; 
     } completion:^(BOOL finished) { 

     }]; 

    }]; 

} 
+0

你正在做什么类型的动画(动画核心,UIView的animation.opengl等)以及什么事件? –

+0

道歉,我会更新OP – garethdn

+0

你必须在viewDiDA中做同样的动作,因为itgets在切换views.call [self beeBobbing]; in viewDidAppear –

回答

3

viewDidLoad中就被称为当你第一次加载控制器第一次,如果你然后导航到其他viewControllers推一下或你改变标签,你不通过viewDidLoad ...

尝试启动动画的方法 - (无效)viewWillAppear中:(BOOL)动画

+0

我已将我的动画方法放在'viewWillAppear'中,但并不是所有这些方法在视图之间导航时都可以工作。上面的帖子中的“beeBobbing”动画不起作用。 – garethdn

+0

你可以尝试在viewDidAppear中使用它吗? – meronix

+0

这给出了相同的结果,但是在第一次动画开始之前有一个很大的延迟 – garethdn

2

您需要添加动画在viewWillAppear:viewDidLoad在控制器初始化并且视图从nib加载或在-loadView方法中创建(如果被覆盖)时被调用一次,并且在控制器被销毁并再次创建之前不会被再次调用。当您前后导航时触发的方法是viewWillAppear:viewDidAppearviewWillDisappear:

+0

我已经将我的动画方法放在'viewWillAppear'中,但是在浏览视图之间似乎并不是所有的动画方法都能工作。上面的帖子中的“beeBobbing”动画不起作用。 – garethdn

+0

viewWillAppear:在显示视图之前触发,因此动画可能会在视图变为可见之前完成。尝试在动画上放一些延迟,或将其放在viewDidAppear中...您必须制定出最佳时机... – graver

+0

我正在使用的动画是循环的,因此它们在出现之前没有完成。另外,当我把动画放在'viewDidAppear'中时,我得到了相同的行为。 – garethdn

6

我认为,如果你给所有动画viewWillAppear:那么它的做工精细... 完蛋了...... :)

0

我注意到的是,你需要设置你想要的视图位置动画在viewDidAppearviewWillAppear

imgClouds.frame = set frame here and this is most important 
[self beeBobbing];