美文网首页
YYImage之YYFrameImage

YYImage之YYFrameImage

作者: MaZengyi | 来源:发表于2017-01-08 02:10 被阅读362次

YYFrameImage 代表是一组图片组合而成的动态图片对象。
首先我们来看初始化方法。
YYFrameImage 有2个初始化方法分别是

- (instancetype)initWithImagePaths:(NSArray *)paths frameDurations:(NSArray *)frameDurations loopCount:(NSUInteger)loopCount

- (instancetype)initWithImageDataArray:(NSArray *)dataArray frameDurations:(NSArray *)frameDurations loopCount:(NSUInteger)loopCount

构造简单,用过一组的图片的 path 或者 data 来把多个图片封装在一起,达在 YYAnimatedImageView 中播放的目的。

其在内部也维护了几个成员变量

NSUInteger _loopCount;
NSUInteger _oneFrameBytes;
NSArray *_imagePaths;
NSArray *_imageDatas;
NSArray *_frameDurations;

分别是循环次数,多个图片 path或者多个图片 data,还有 每一帧播放时间的数组。

为了在 YYAnimatedImageView 播放,需要实现 YYAnimatedImage 协议,我们来看下多个图片如何组合。

首先告诉 YYAnimatedImageView 有多少帧可以播放。

- (NSUInteger)animatedImageFrameCount {
    if (_imagePaths) {
        return _imagePaths.count;
    } else if (_imageDatas) {
        return _imageDatas.count;
    } else {
        return 1;
    }
}

之后提供循环的次数

- (NSUInteger)animatedImageLoopCount {
    return _loopCount;
}

提供每一帧的的大小,为了图片优化

- (NSUInteger)animatedImageBytesPerFrame {
    return _oneFrameBytes;
}

返回每一帧的图片

- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index {
    if (_imagePaths) {
        if (index >= _imagePaths.count) return nil;
        NSString *path = _imagePaths[index];
        CGFloat scale = _NSStringPathScale(path);
        NSData *data = [NSData dataWithContentsOfFile:path];
        return [[UIImage imageWithData:data scale:scale] yy_imageByDecoded];
    } else if (_imageDatas) {
        if (index >= _imageDatas.count) return nil;
        NSData *data = _imageDatas[index];
        return [[UIImage imageWithData:data scale:[UIScreen mainScreen].scale] yy_imageByDecoded];
    } else {
        return index == 0 ? self : nil;
    }
}

提供每一帧的显示时间

- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index {
    if (index >= _frameDurations.count) return 0;
    NSNumber *num = _frameDurations[index];
    return [num doubleValue];
}

好了,frameImage 实现比较简单,代码也清晰易懂。更多细节可以自己去挖掘哦。

相关文章

  • YYImage之YYFrameImage

    YYFrameImage 代表是一组图片组合而成的动态图片对象。首先我们来看初始化方法。YYFrameImage ...

  • YYImage之YYImage

    YYImage 是框架对图片的封装对象,它支持 GIF, APNG,WebP 格式的动画图片。 初始化图片 生成一...

  • YYImage

    YYImage 一、源码分析 1、来到YYImage.m的+ (nullable YYImage *)imageN...

  • YYImage之YYSpriteSheetImage

    SpriteSheetImage 从一张大图片上面提取多个小图片来组成一个动画,将多个小图片集成到大图片的好处是可...

  • YYImage之YYImageDecoder

    YYImageDecoder 这个类是 YYImage 底层对图片处理的解码库,它会对图片解析成 YYImageF...

  • YYImage之YYAnimatedImageView

    本文是 YYImage 的最后一篇。主要探究一下 YYAnimatedImageView 如何显示一个动画图片,将...

  • YYImage源码解析<一> 简单使用

    YYImage学习笔记<一> 简单使用 前言 YYImage开源库包含5个类文件,分别为:YYImage、YYF...

  • YYKit---Image gif

    帧动画 YYFrameImage 继承UIImage 1.- (nullabl...

  • YYImage 源码剖析:图片处理技巧

    YYImage 源码剖析:图片处理技巧 YYImage 源码剖析:图片处理技巧

  • YBImageBrowser ,YYImage iOS 14 兼

    YBImageBrowser 框架图片加载不出来,YYImage框架加载图片黑屏解决 pod 'YYImage',...

网友评论

      本文标题:YYImage之YYFrameImage

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