在视图控制器之间移动时动画不会重新启动

时间:2012-05-18 14:38:10

标签: iphone objective-c ios animation uiviewcontroller

我有很多动画在加载根视图控制器时自动启动。这些动画包含在viewDidLoad中。当我导航到我的下一个视图控制器并返回到根视图控制器时,所有动画都已停止。当我按下“主页”按钮然后返回视图时会出现相同的行为。

我确定我在这里遗漏了一些非常基本的东西但是会感激任何帮助。感谢。

编辑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) {

        }];

    }];

}

4 个答案:

答案 0 :(得分:6)

我想如果你在viewWillAppear:给出所有动画,那么它的工作正常...... 而已... :)

答案 1 :(得分:3)

viewDidLoad刚刚第一次加载控制器时被调用,如果你导航到其他viewControllers有一些推或你改变标签,你没有传入viewDidLoad ......

尝试在方法中启动动画 - (void)viewWillAppear:(BOOL)动画

答案 2 :(得分:2)

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

答案 3 :(得分:0)

我注意到您需要在viewDidAppearviewWillAppear

中设置要制作动画的视图的位置
imgClouds.frame = set frame here and this is most important
[self beeBobbing];