1

我需要为图像设置动画。我有大量图像,这需要作为视频播放。在播放之间有时我需要更改一些图像,因为它们将在服务器上更新。所以播放应该会自动更新这个新图像。

我尝试过使用 UIImageView。在那里我们无法控制动画。然后我尝试 CAKeyframeAnimation 为 values 属性提供图像数组。我可以播放和暂停动画。但在这里我也不能在播放时动态更改图像。

谁能帮我解决这个问题。

谢谢米娅

4

3 回答 3

0

UIImageView 上的动画系统非常有限。我建议您使用 2 图像视图进行自己的实现。

您将更改一个图像视图中的图像并使用淡入和淡出UIView animateWithDuration

我给你写了一个方法。请注意:我没有测试过。

它假设您将框架放在一个名为“frames”的数组中,并且将两个框架UIIMageView放在一起,称为“imgv1”和“imgv2”

-(void)performAnimationOfFrameAtIndex:(NSNumber*)indexNum
{        
    int index = [indexNum intValue];
    if(index >= frames.count)
    {
        return;
    }
    UIImage *img = [frames objectAtIndex:index];

    UIImageView *imgIn;
    UIImageView *imgOut;
    if(index % 2 == 0)
    {
        imgIn = imgv1;
        imgOut = imgv2;
    }
    else {
        imgIn = imgv2;
        imgOut = imgv1;
    }
    imgIn.image = img;
    [self.view sendSubviewToBack:imgIn];

    [UIView animateWithDuration:0.1 animations:^{
        imgIn.alpha = 1;
        imgOut.alpha = 0;
    } completion:^(BOOL finished) {
        [self performSelectorOnMainThread:@selector(performAnimationOfFrameAtIndex:) withObject:[NSNumber numberWithInt:index+1] waitUntilDone:NO];
    }];

}
于 2012-04-18T13:12:45.360 回答
0

使用两个UIImageViews并交换它们。

如果您对“动画”有弱引用UIView,请务必检查动画是否已在完成块中完成。否则,当您导航到另一个视图时,您可能会遇到性能问题,对动画方法的递归调用将继续!

- (void)animateImagesAtIndex:(NSNumber *)imageIdx {
    // Do something here
    [UIView animateWithDuration:1 animations:^{
        // Do swap
    }
    completion:^(BOOL finished) {
        if (finished) {
            [self animateImagesAtIndex:imageIdx];
        }
    }];
}
于 2012-06-12T11:35:48.647 回答
0

UIImageView 支持一系列图像的动画。您只需使用图像数组设置属性动画图像,并调用方法 startAnimating 和 stopAnimating。

于 2012-12-30T17:12:23.897 回答