每个人都喜欢一个好的 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;
}
此仓库包括一个类别,用于将 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 请求(或报告一个问题)。