在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
。我有什么可以在这里找到的吗?
答案 0 :(得分:7)
您永远不需要在viewDidLoad
中调用它。这是完全错误的,它不会起作用。将代码移到viewDidAppear
。如果您有理由将其放入viewDidLoad
,请修正原因!
编辑:你永远不知道何时调用viewDidLoad
- 它甚至可以被多次调用一个控制器。通常,动画缓慢的问题是由两个动画之间的碰撞引起的。例如,如果您的控制器被UINavigationController
动画显示在屏幕上,则您的动画将与“推送”动画发生碰撞,并且它们会很慢。这就是你应该使用viewDidAppear
的原因,因为当调用此方法时,你知道控制器已经显示并且“出现”动画已经结束。
答案 1 :(得分:0)
使用一些延迟调用方法。
[self performSelector:@selector(shakeAnimation) withObject: afterDelay:2.0]