美文网首页ios
关于展示网络GIF(基于FLAnimatedImageView)

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

作者: 海笙樾 | 来源:发表于2018-04-28 10:59 被阅读286次

    FLAnimatedImage项目介绍

    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:默认图片];
    

    相关文章

      网友评论

        本文标题:关于展示网络GIF(基于FLAnimatedImageView)

        本文链接:https://www.haomeiwen.com/subject/hozwlftx.html