viewDidLoad中不寻常的animateWithDuration行为

时间:2012-09-10 10:17:48

标签: iphone objective-c ios ipad animation

UIImageView上执行动画变换时,我遇到了一些异常行为。下面方法中的代码使图像看起来像是从左右摇摆:

-(void) shakeAnimation
{
    float degrees = 30; //the value in degrees
    imgShake.autoresizingMask = UIViewAutoresizingNone;
    [UIView animateWithDuration:0.20f delay:0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat) animations:^{
        imgShake.transform = CGAffineTransformMakeRotation(degrees*M_PI/180);
    } completion:^(BOOL finished) {
        imgShake.transform = CGAffineTransformMakeRotation(1*M_PI/180);
        NSLog(@"Shake finished");
    }];
}

问题出在我调用方法的地方。如果我在viewDidAppear中调用该方法,动画似乎完美无缺......但由于其他原因,我需要在viewDidLoad中调用它。当我从viewDidLoad调用方法时,动画功能但不是animateWithDuration指定的速度。它慢得多,可能0.70f。我有什么可以在这里找到的吗?

2 个答案:

答案 0 :(得分:7)

您永远不需要在viewDidLoad中调用它。这是完全错误的,它不会起作用。将代码移到viewDidAppear。如果您有理由将其放入viewDidLoad,请修正原因!

编辑:你永远不知道何时调用viewDidLoad - 它甚至可以被多次调用一个控制器。通常,动画缓慢的问题是由两个动画之间的碰撞引起的。例如,如果您的控制器被UINavigationController动画显示在屏幕上,则您的动画将与“推送”动画发生碰撞,并且它们会很慢。这就是你应该使用viewDidAppear的原因,因为当调用此方法时,你知道控制器已经显示并且“出现”动画已经结束。

答案 1 :(得分:0)

使用一些延迟调用方法。

[self performSelector:@selector(shakeAnimation) withObject: afterDelay:2.0]