在iOS中显示动画GIF

swi*_*ade 90 objective-c ios

我注意到,使用iMessage,现在可以发送和显示GIF动画.这是否意味着Apple现在支持在应用程序中显示动画GIF,或者最简单的方法仍然是将图像分割成帧然后依次显示它们?从iOS 5.1开始,显示动画GIF的最简单方法是什么?

谢谢!

Joe*_*tti 139

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

假设你正在为一个微调器做动画.将所有框架复制到项目中,并按如下方式命名:

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

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

[UIImage animatedImageNamed:@"spinner-" duration:1.0f];
Run Code Online (Sandbox Code Playgroud)

来自文档:

此方法通过将一系列数字附加到name参数中提供的基本文件名来加载一系列文件.例如,如果name参数以'image'作为其内容,则此方法将尝试从名称为'image0','image1'等文件加载到'image1024'的文件中加载图像.动画图像中包含的所有图像应共享相同的大小和比例.

  • 如果你没有帧中的动画,你可以在预览应用程序中打开一个GIF,然后将帧拖出.帧应该被提取为.tiff,所以请看这里:http://www.maclife.com/article/howtos/how_batch_convert_images_your_mac_without_photoshop (5认同)

Rap*_*aad 38

FLAnimatedImage是适用于iOS的高性能开源动画GIF引擎:

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

这是我为Flipboard中的所有GIF编写的一个经过良好测试的组件.


Eri*_*ric 37

我建议使用以下代码,它更轻量级,并且与ARC和非ARC项目兼容,它在UIImageView上添加了一个简单的类别:

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

  • 内存使用率过高 (3认同)

Tho*_*asW 12

另一种方法是使用a UIWebView来显示动画GIF.如果要从服务器获取GIF,那么这将负责获取.它也适用于本地GIF.

  • "从iOS 8.0和OS X 10.10开始,使用WKWebView将Web内容添加到您的应用程序.不要使用UIWebView或WebView." https://developer.apple.com/reference/webkit/wkwebview (2认同)

sas*_*ash 8

iOS 11 Photos框架允许添加GIF动画播放.

示例应用可在此处下载

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

在此输入图像描述


小智 7

#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
Run Code Online (Sandbox Code Playgroud)