在iOS中显示动画GIF

时间:2012-03-16 21:21:32

标签: objective-c ios

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

谢谢!

8 个答案:

答案 0 :(得分:138)

如果您的目标是iOS7并且已将图像拆分为框架,则可以使用animatedImageNamed:duration:

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

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

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

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

From the docs

  

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

答案 1 :(得分:37)

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

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

答案 2 :(得分:37)

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

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

这是我写给power all GIFs in Flipboard的经过充分测试的组件。

答案 3 :(得分:12)

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

答案 4 :(得分:8)

iOS 11 照片框架允许添加动画Gif播放。

示例应用可以下载here

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

enter image description here

答案 5 :(得分: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

答案 6 :(得分:1)

您可以从this link

使用SwiftGif

用法:

return sortedWithoutUnused.concat(unusedCodes);

答案 7 :(得分:0)

NSString *pathForGif = [[NSBundle mainBundle] pathForResource:@"ic_homepage_random0330" ofType: @"gif"];

NSData *gifData = [NSData dataWithContentsOfFile:pathForGif];
                
YYImage *img = [YYImage imageWithData:gifData];

YYAnimatedImageView *contentImageView = [[YYAnimatedImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
contentImageView.autoPlayAnimatedImage = YES;
contentImageView.image = img;