1

有两种主要的记录 UIView 动画的方法。一种是不推荐使用的过程,其中一个以方法开头进行多次调用,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

我看到了同样的问题,直到我意识到在动画之间我隐藏了视图并且再也没有将 view.hidden 更改为 NO。您是否有可能在动画之间隐藏视图或将 alpha 设置为 0.0?

于 2011-09-08T21:54:44.273 回答