viewDidLoad中不寻常的animateWithDuration行为

gar*_*hdn 1 iphone animation objective-c ipad ios

在对a执行动画变换时,我遇到了一些异常行为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");
    }];
}
Run Code Online (Sandbox Code Playgroud)

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

Sul*_*han 7

你永远不需要打电话viewDidLoad.这是完全错误的,它不会起作用.将代码移入viewDidAppear.如果您有理由将其付诸实践viewDidLoad,请解决原因!

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