通过提取.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秒,通过运行应用程序,它就像平滑的动画一样,甚至卡住了。
任何解决方案?
答案 0 :(得分:1)
在所有情况下,如果您将所有48张图像加载到内存中,我担心可能会导致内存警告,请使用仪器进行检查。
================================
您可能需要强制它执行解压缩和渲染,请检查此link1和此link2
试试这个,它会导致图像解压缩,即使图像上下文只有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);
}
希望这有用。
答案 1 :(得分:0)
你的方法不会起作用。有关您将遇到的问题的一些示例,请参阅how-to-resolve-memory-crash-in-iphone和loading-images-for-animation-in-uiimageview-ios。只需在h.264中编码电影并使用AVPlayer播放它就会更好。这比创建一堆全屏.gif文件要好得多。