在iOS中显示animationGIF

我注意到,使用iMessage,animationgif现在可以发送和显示。 这是否意味着苹果现在支持在应用程序中显示animationGIF,还是最简单的方法仍然是将图像分成几个帧,然后依次显示它们? 从iOS 5.1开始显示animationGIF最简单的方法是什么?

谢谢!

如果您的目标是iOS7,并且已经将图像拆分为多个帧,则可以使用animatedImageNamed:duration: :。

假设你正在制作一个微调。 将所有帧复制到项目中,并按如下所示命名它们:

  • spinner-1.png
  • spinner-2.png
  • spinner-3.png
  • 等等

然后通过以下方式创build图像

 [UIImage animatedImageNamed:@"spinner-" duration:1.0f]; 

从文档 :

此方法通过将一系列数字附加到name参数中提供的基本文件名称来加载一系列文件。 例如,如果名称参数具有“图像”作为其内容,则此方法将尝试从名称为“image0”,“image1”等的文件一直加载到“image1024”。 包含在animation图像中的所有图像应具有相同的大小和比例。

我会build议使用下面的代码,它更轻量级,兼容ARC和非ARC项目,它在UIImageView上添加一个简单的类别:

https://github.com/mayoff/uiimage-from-animated-gif/

FLAnimatedImage是iOS的高性能开源animationGIF引擎:

  • 以与桌面浏览器相媲美的播放速度同时播放多个GIF
  • 尊重可变的帧延迟
  • 在内心压力下performance优雅
  • 消除第一个播放循环中的延迟或阻塞
  • 以与现代浏览器相同的方式解释快速GIF的帧延迟

这是一个经过充分testing的组件,我写信给Flipboard中的所有GIF 。

另一种方法是使用UIWebView来显示animation的GIF。 如果GIF将从服务器获取,那么这将负责抓取。 它也适用于当地的GIF。

 #import <QuickLook/QuickLook.h> #import "ViewController.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; QLPreviewController *preview = [[QLPreviewController alloc] init]; preview.dataSource = self; [self addChildViewController:preview]; [self.view addSubview:preview.view]; } #pragma mark - QLPreviewControllerDataSource - (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController { return 1; } - (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx { NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"myanimated.gif" ofType:nil]]; return fileURL; } @end 

iOS 11的照片框架允许添加GIFanimation播放。

示例应用程序可以在这里下载

有关GIFanimation播放的更多信息(从13:35分开始): https : //developer.apple.com/videos/play/wwdc2017/505/

在这里输入图像描述