YYImage之YYSpriteSheetImage

SpriteSheetImage 从一张大图片上面提取多个小图片来组成一个动画,将多个小图片集成到大图片的好处是可以节省多张图片占据的容量,优化安装包大小。

YYSpriteSheetImage 初始化方法只有一个

- (nullable instancetype)initWithSpriteSheetImage:(UIImage *)image
                                     contentRects:(NSArray<NSValue *> *)contentRects
                                   frameDurations:(NSArray<NSNumber *> *)frameDurations
                                        loopCount:(NSUInteger)loopCount;

需要传入一张完整的大图,每张小图的 rect ,动画时间,动画循环次数。

- (instancetype)initWithSpriteSheetImage:(UIImage *)image
                            contentRects:(NSArray *)contentRects
                          frameDurations:(NSArray *)frameDurations
                               loopCount:(NSUInteger)loopCount {
    if (!image.CGImage) return nil;
    if (contentRects.count < 1 || frameDurations.count < 1) return nil;
    if (contentRects.count != frameDurations.count) return nil;
    
    self = [super initWithCGImage:image.CGImage scale:image.scale orientation:image.imageOrientation];
    if (!self) return nil;
    
    _contentRects = contentRects.copy;
    _frameDurations = frameDurations.copy;
    _loopCount = loopCount;
    return self;
}

在内部只是持有这个图片的 image 对象,而在展示的时候才会去截取相应的 rect 的图片。

在来看如何实现 YYAnimatedImage 的协议来播放动画。

返回帧数

- (NSUInteger)animatedImageFrameCount {
    return _contentRects.count;
}

返回循环次数

- (NSUInteger)animatedImageLoopCount {
    return _loopCount;
}

返回每一帧的图片

- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index {
    return self;
}

每一帧播放的时间

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

这个方法与其他不同,它返回每一帧的 rect,也就是每一帧图片显示的范围,配合 animatedImageFrameAtIndex 一起来组成 SpriteSheet

- (CGRect)animatedImageContentsRectAtIndex:(NSUInteger)index {
    if (index >= _contentRects.count) return CGRectZero;
    return ((NSValue *)_contentRects[index]).CGRectValue;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,642评论 4 61
  • 进了,进了。国足吗?不是,是黄鳝进去了。昨天国足1:0战胜韩国队,本来应该是个大新闻,竟然不是昨天的头条,而是被黄...
    小瑞说阅读 3,118评论 0 2
  • 夜已经很深了,再有十分钟,就是明天了,空调按时关闭,刚才写的几百字的文字全部丢失,有点懊恼,但又有些坦然。丢失的可...
    蓝色安琪阅读 1,792评论 0 1
  • 基本的权限配置 基于角色的自动化权限管理 要使用Jenkins做企业级CI部署,一个重要的事情就是如何做好用户权限...
    志壹阅读 6,528评论 0 0
  • 2017年9月17日 坚持分享第38天 周静 语言的力量非同想象,换个说法,关系会更和谐。 【沟通用语】...
    周老师成长记录仪阅读 2,394评论 4 1

友情链接更多精彩内容