3

通过提取 .gif 图像,我得到了 48 帧,分辨率为 (1024*768)。我将这些帧存储在这样的数组中。

NSMutableArray *splashImages = [[NSMutableArray alloc] init];
    for(int i=1;i <= 48;i ++)
    {
        [splashImages addObject:[UIImage imageNamed:[NSString  stringWithFormat:@"img%d.jpg",i]]];
    }
    [ImageView setAnimationImages:splashImages];
    [ImageView setAnimationDuration:1.0];
    [ImageView startAnimating];

我把它给了 UIImageView 持续时间为 1 秒,通过运行应用程序,它像平滑动画一样消失了,甚至卡住了。

有什么解决方案吗?

4

2 回答 2

1

毕竟,如果您将所有 48 张图像加载到内存中,恐怕会导致内存警告,请使用 Instrument 进行检查。

=================================

您可能需要先强制它进行解压缩和渲染,请检查此链接1和此链接2

试试这个,它会导致图像解压缩,即使图像上下文只有 1 个像素大。:

UIGraphicsBeginImageContext(CGSizeMake(1, 1));
    [decompressedImage drawAtPoint:CGPointZero];
UIGraphicsEndImageContext();

或类似的东西:

CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)imageData);
    CGImageRef image = CGImageCreateWithJPEGDataProvider(imageDataProvider, NULL, NO, kCGRenderingIntentDefault);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bitmapContext = CGBitmapContextCreate(NULL, CGImageGetWidth(image), CGImageGetHeight(image), CGImageGetBitsPerComponent(image), 0, colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little);
    CGColorSpaceRelease(colorSpace);
    CGContextDrawImage(bitmapContext, CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)), image);

    CGDataProviderRelease(imageDataProvider);
    CGContextRelease(bitmapContext);

    if (image){
        decompressedImage = [UIImage imageWithCGImage:image];
        CGImageRelease(image);
    }

希望这会有所帮助。

于 2013-01-24T22:12:28.817 回答
0

你的方法是行不通的。请参阅how-to-resolve-memory-crash-in-iphoneloading-images-for-animation-in-uiimageview-ios了解您将遇到的一些问题示例。你最好只用 h.264 编码电影并用 AVPlayer 播放。这比创建一堆全屏 .gif 文件要好得多。

于 2013-06-21T05:08:36.743 回答