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呼び出されるかはわかりません。1 つのコントローラーに対して複数回呼び出すこともできます。通常、アニメーションが遅いという問題は、2 つのアニメーション間の衝突が原因で発生します。たとえば、コントローラーが によって画面にアニメーション化されているUINavigationController場合、アニメーションは「プッシュ」アニメーションと衝突し、遅くなります。viewDidAppearこのメソッドが呼び出されると、コントローラーが表示され、「表示」アニメーションが終了したことがわかるため、使用することになっているのはそのためです。

于 2012-09-10T10:20:15.453 に答える
0

遅延を使用してメソッドを呼び出します。

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

于 2012-09-10T11:14:29.253 に答える