关于展示网络GIF(基于FLAnimatedImageView)

FLAnimatedImage项目介绍 【关于展示网络GIF(基于FLAnimatedImageView)】FLAnimatedImage项目采用了“生产者和消费者”模型来处理这个GIF动画的播放的,它会创建两个线程,一个负责生产,另一个负责消费。生产者FLAnimatedImage负责提供帧UIImage对象,消费者FLAnimatedImageView负责显示该UIImage对象。
FLAnimatedImage接口介绍

@property (nonatomic, strong, readonly) UIImage *posterImage; //GIF动画的封面帧图片 @property (nonatomic, assign, readonly) CGSize size; //GIF动画的封面帧图片的尺寸 @property (nonatomic, assign, readonly) NSUInteger loopCount; //GIF动画的循环播放次数 @property (nonatomic, strong, readonly) NSDictionary *delayTimesForIndexes; // GIF动画中的每帧图片的显示时间集合 @property (nonatomic, assign, readonly) NSUInteger frameCount; //GIF动画的帧数量 @property (nonatomic, assign, readonly) NSUInteger frameCacheSizeCurrent; //当前被缓存的帧图片的总数量 @property (nonatomic, assign) NSUInteger frameCacheSizeMax; // 允许缓存多少帧图片// Intended to be called from main thread synchronously; will return immediately. // If the result isn't cached, will return `nil`; the caller should then pause playback, not increment frame counter and keep polling. // After an initial loading time, depending on `frameCacheSize`, frames should be available immediately from the cache. // 取出对应索引的帧图片 - (UIImage *)imageLazilyCachedAtIndex:(NSUInteger)index; // Pass either a `UIImage` or an `FLAnimatedImage` and get back its size // 计算该帧图片的尺寸 + (CGSize)sizeForImage:(id)image; // 初始化方法 // On success, the initializers return an `FLAnimatedImage` with all fields initialized, on failure they return `nil` and an error will be logged. - (instancetype)initWithAnimatedGIFData:(NSData *)data; // Pass 0 for optimalFrameCacheSize to get the default, predrawing is enabled by default. - (instancetype)initWithAnimatedGIFData:(NSData *)data optimalFrameCacheSize:(NSUInteger)optimalFrameCacheSize predrawingEnabled:(BOOL)isPredrawingEnabled NS_DESIGNATED_INITIALIZER; + (instancetype)animatedImageWithGIFData:(NSData *)data; //初始化数据 @property (nonatomic, strong, readonly) NSData *data;

FLAnimatedImageView接口
@interface FLAnimatedImageView : UIImageView// Setting `[UIImageView.image]` to a non-`nil` value clears out existing `animatedImage`. // And vice versa, setting `animatedImage` will initially populate the `[UIImageView.image]` to its `posterImage` and then start animating and hold `currentFrame`. @property (nonatomic, strong) FLAnimatedImage *animatedImage; //设置GIF动画数据 @property (nonatomic, copy) void(^loopCompletionBlock)(NSUInteger loopCountRemaining); //GIF动画播放一次之后的回调Block@property (nonatomic, strong, readonly) UIImage *currentFrame; //GIF动画当前显示的帧图片 @property (nonatomic, assign, readonly) NSUInteger currentFrameIndex; //GIF动画当前显示的帧图片索引// The animation runloop mode. Enables playback during scrolling by allowing timer events (i.e. animation) with NSRunLoopCommonModes. // To keep scrolling smooth on single-core devices such as iPhone 3GS/4 and iPod Touch 4th gen, the default run loop mode is NSDefaultRunLoopMode. Otherwise, the default is NSDefaultRunLoopMode. @property (nonatomic, copy) NSString *runLoopMode;

用法结合SDWebImage
FLAnimatedImageView * topImage = [[FLAnimatedImageView alloc]init]; [topImage sd_setImageWithURL:动态图片的URL placeholderImage:默认图片];

    推荐阅读