1

UIView をアニメーション化するための 2 つの主要な文書化された方法があります。1 つはメソッドで始まる複数の呼び出しを行う非推奨のプロセスであり、もう 1 つbeginAnimations:context:はブロックベースの新しい提案されたアプローチです。

アプリケーションに次のコードがあります。ただし、古い非推奨のアニメーション セグメントのみが機能します。新しいブロックベースのアプローチは、最初は機能しますが、その後は毎回アニメーションの最後まで直接スキップし、すぐに最後のフレームだけを表示します。誰もこれを経験したことがありますか?

-(void)updateImageViewSlider:(UIImage *)image {

    mImageFeedSwipe.alpha = 0.0;
    [mImageFeedSwipe setHidden:NO];
    mImageFeedSwipe.frame = DEFAULT_IMAGEVIEW_RECT;

    [mImageFeedSwipe setImage:image];

    //
    // The following animation code works fine.
    //

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    mImageFeedSwipe.alpha = 1.0;
    [mImageFeedSwipe setFrame:NEW_IMAGEVIEW_RECT];
    [UIView commitAnimations];

    //
    // The following DOES NOT work except on the first run
    //

    int animationOptions = 0
    | UIViewAnimationOptionCurveEaseInOut
    | UIViewAnimationOptionBeginFromCurrentState
    | UIViewAnimationOptionAllowUserInteraction;
    [UIView animateWithDuration:1.0
                          delay:0 
                        options:animationOptions
                     animations:^{  

                         // Bring in the swiping image view...
                         mImageFeedSwipe.alpha = 1.0;
                         [mImageFeedSwipe setFrame:NEW_IMAGEVIEW_RECT];
                        } 
                     completion:nil];
}

これは を介し​​てメインスレッドで実行されています[self performSelectorOnMainThread...]

4

1 に答える 1

1

I was seeing this same problem until I realized that in between animations I was hiding the view and never changing view.hidden to NO again. Any chance that you are hiding your view or setting alpha to 0.0 in between animations?

于 2011-09-08T21:54:44.273 に答える