OLImageView 1.5.1

OLImageView 1.5.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最新发布2015年10月

Diego Torres 维护。



  • 作者
  • Diego Torres

OLImageView(和 OLImage)

每个人都喜欢一个好的 GIF。不幸的是,Apple 的 UIImage 实现 不支持动画 GIF。OLImage 和 OLImageView 可以作为 UIImage 和 UIImageView 的直接替代品,对动画 GIF 提供了非常好的支持。

我们为什么要这样做呢?

已经有很多其他类可以完成这个工作,但它们并没有按照预期工作。大多数现有的类

  • 总是将帧之间的延迟平均分配,即使文件指定了每帧不同的延迟
  • 同步加载帧,这会冻结主线程(尤其是在加载大文件时),并且只有在所有帧都加载完成后才显示任何内容

我们试图解决这些问题中的一些,但我们发现体验仍然并不完全正确。经过一番查找,我们发现浏览器会在某些条件下改变帧延迟。这个实现采用了这些条件,以提供与 WebKit 渲染动 态 GIF 的体验一致。

如何使用

添加头文件并将 UIImageView 替换为 OLImageView。

例子

// Before (in your View Controller in this example)

- (void)loadView 
{
    [super loadView];
    self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,200,200)];
    [self.view addSubview:self.imageView];
}


// After

#import "OLImageView.h"

- (void)loadView 
{
    [super loadView];
    self.imageView = [[OLImageView alloc] initWithFrame:CGRectMake(0,0,200,200)];
    [self.view addSubview:self.imageView];
}

现在,当您在视图中创建图像实例时,应该使用数据来创建。

例子

- (void)loadReceivedImageData:(NSData *)data;
{
    UIImage *image = [OLImage imageWithData:data];
    self.imageView.image = image;
}

与其他库的集成

AFNetworking

此仓库包括一个类别,用于将 OLImage 与 AFNetworking v1.x 集成 UIImageView 类别,它提供缓存和远程 URL 设置器。要使用此类别,请将类别导入到您将使用 OLImageView 的 AFNetworking 类别的地方。

AFNetworking 2.x 的用户可以使用提供的任何两种图像响应序列化器。 OLImageResponseSerializer 是标准的 AFNetworking 序列化器的直接替代品,它只是为每个数据创建 OLImage 实例。

imageView.imageResponseSerializer = [[OLImageResponseSerializer alloc] init];

那些想要保持默认的 AFImageResponseSerializer 行为或需要链式多个序列化器的用户,有一个严格的版本,只接受 image/gif: OLImageStrictResponseSerializer。序列化器链可能是这样的:

imageView.imageResponseSerializer =
    [AFCompoundResponseSerializer compoundSerializerWithResponseSerializers:
        @[[[OLImageStrictResponseSerializer alloc] init], imageView.imageResponseSerializer]];

我们非常欢迎您发送包含将 OLImage 与其他库集成的类别或子类的 pull 请求。

帮助我们改进

发现了一个错误?一个拼写错误?您能使解码更快吗?请随意差异化并发送给我们一个 pull 请求(或报告一个问题)。