1

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。这里有什么我可能会丢失的吗?

4

2 回答 2

7

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

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

于 2012-09-10T10:20:15.453 回答
0

使用一些延迟调用该方法。

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

于 2012-09-10T11:14:29.253 回答