动态更改动画IOS中的图像

时间:2012-04-18 13:03:34

标签: ios animation

我需要动画图片。我有大量的图像,这需要作为视频播放。在播放之间,有时我需要更改一些图像,因为它们将在服务器上更新。因此,播放应自动更新此新图像。

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

任何人都可以帮我解决这个问题。

由于 mia

3 个答案:

答案 0 :(得分: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];
    }];

}

答案 1 :(得分:0)

使用两个UIImageViews并交换它们。

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

- (void)animateImagesAtIndex:(NSNumber *)imageIdx {
    // Do something here
    [UIView animateWithDuration:1 animations:^{
        // Do swap
    }
    completion:^(BOOL finished) {
        if (finished) {
            [self animateImagesAtIndex:imageIdx];
        }
    }];
}

答案 2 :(得分:0)

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