关于展示网络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:默认图片];
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 猎杀IP
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 四首关于旅行记忆的外文歌曲
- 广角叙述|广角叙述 展众生群像——试析鲁迅《示众》的展示艺术
- 醒不来的梦
- 自媒体形势分析
- 数学大作战
- 关于自我为中心的一点感想
- 2018.03.18