扩展第三方类

细心的朋友可能会发现,我们前面计算主角的大小用的总是同一方向第一帧纹理的大小,如果纹理大小有出入的话,会产生较大的偏差,最好的方法是取当前动画帧纹理的大小。不过这有些难度,所以我们退之求其次,计算所有帧的平均大小吧。

这次我们不修改原有的第三方类,因为我们上面已经熟悉了类的内部功能,所以我们直接用Swift写一个类的扩展吧(Objective-C的语法...)。

在项目API组中新建一个Swift文件,名为CAWSpriteLayer+ext.swift。

打开该文件,将其替换为如下内容:

import UIKit

extension CAWSpriteLayer{

func avgSizeForFrameBase(_ frameNameBase:String)->CGSize{

//待实现

}

}

可以看到我们在CAWSpriteLayer类的扩展里新建了方法,该方法唯一的参数为同一方向的纹理名称前缀,即如果是向上,则会传入 "w背" 实参,它会将所有"w背"前缀的纹理大小都加入计算。

我们前面已经了解到,CAWSpriteLayer类中含有一个animationLayer.spriteData变量,其中有我们想要每一帧名称、大小等等所需要的所有信息。

我们现在来实现avgSizeForFrameBase方法,将其中的注释一行替换为如下内容:

let dict = animationLayer.spriteData as! [String:CAWSpriteData]let baseNames = Array(dict.keys)let frameNames = baseNames.filter {$0.hasPrefix(frameNameBase)}var totalWidth:CGFloat = 0var totalHeight:CGFloat = 0let count = CGFloat(frameNames.count)for frameName in frameNames{ let spriteData = dict[frameName]! totalWidth += CGFloat(spriteData.spriteWidth) totalHeight += CGFloat(spriteData.spriteHeight)}return CGSize(width: totalWidth/count, height: totalHeight/count)

回到spriteSize方法,将其中的:

spriteSize = sprite.size(forFrame: "w正0")

之类的方法,换为新的平均值方法:

spriteSize = sprite.avgSizeForFrameBase("w正")

其他方向类似。

好啦!我们已经成功的按我们的需求扩展了第三方的类!!!

结尾

经历了前面这么多的内容,大家看的一定很累,这是自然的。(虽然本猫写的也很累...),希望大家可以略微学到一丢丢新知识,希望大家可以把它应用到实际App开发中去 _

现在!抛开电脑,到了happy的时候了!冲个热水澡,来杯冰镇可乐+至尊大汉堡套餐?之类的美味吧!!!

感谢观赏,再会!

PS:全部代码可以到我的github中下载:

https://gitee.com/hopy/iOS-JingJin/tree/master/TPSupportsTest

swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类相关推荐

  1. CSS3+JS卡通人物开车动画

    下载地址 CSS3+JS卡通人物开车动画场景 dd:

  2. css逐帧动画图片太大怎么办,不建议使用 CSS3 keyframe transform 实现逐帧动画

    © Young 2018-12-26 21:43 Welcome to My GitHub 一般在使用 CSS3 keyframe transform 实现逐帧动画时,往往会先把逐帧动画图片合成精灵图 ...

  3. 逐帧动画 AnimationDrawable

    逐帧动画是通过android中的android.graphics.drawable.AnimationDrawable类来实现的 在该类中保存了帧序列以及显示的时间,为了简化动画的创建OPhone提供 ...

  4. css3中的animation的动画帧制作-卡通人物的走动效果

    css3中的animation的动画帧制作-卡通人物的走动效果 代码如下: <!DOCTYPE html> <html lang="en"> <hea ...

  5. 追忆童年,教你用Python画出儿时卡通人物

    作者 | 张同学 来源 | 凹凸数据 大家好,我是张同学. 又到一年一度的国际儿童节,作为逢节必过的程序猿,怎么可以放过这个学习技能的机会呢? 于是,今天我们来学习 Python 的 Turtle 库 ...

  6. python画卡通人物_追忆童年,教你用Python画出儿时卡通人物

    作者 | 张同学 来源 | 凹凸数据 大家好,我是张同学. 又到一年一度的国际儿童节,作为逢节必过的程序猿,怎么可以放过这个学习技能的机会呢? 于是,今天我们来学习 Python 的 Turtle 库 ...

  7. php 照片变成卡通照片,怎么把照片做成q版卡通 照片变q版卡通人物 q版卡通头像制作...

    想要把自己的头像变成真人q版卡通漫画,偷偷问了一个漫画家怎么制作的,他说用电脑手绘,得有画画基础才行,小编这下子就打了退堂鼓了,照片制作视频容易,但是自己画画太难了.有什么比较容易方法把照片做成q版卡 ...

  8. 论如何把自己变成卡通人物(OpenCV制作卡通化头像)

    原文链接:http://www.juzicode.com/python-funny-opencv-cartoon-profile-photo/ hello,大家好,我是桔子菌. 桔子菌前面发布了一些O ...

  9. 计算机图形学实验——二维卡通人物交互

    计算机图形学实验1.2卡通人物交互 OpenGL卡通人物交互 基础"图元"绘制 OpenGL拾取物体 反走样 略提反走样问题 OpenGL实现二维反走样 放缩.旋转和拖动 小结 O ...

最新文章

  1. MySQL 5.6中如何定位DDL被阻塞的问题
  2. 将Excel文件数据库导入SQL Server
  3. python编程课程上课有用吗-朋友圈里的编程课,是 Python 还是成功学?
  4. 自定义类模板 重载遇到的问题
  5. 硅谷大佬为何加速逃离加州:赋税过重,生活质量持续恶化
  6. 莱斯信道衰落下的QPSK误码率分析
  7. 和佳股份有没有纳米机器人_新高赛复赛入围项目(49)一种纳米硅质绝热材料及其制备方法...
  8. 支付宝小程序面向个人开发者公测
  9. angular的$q服务和promise模式
  10. sql面试题sql语句_第二轮SQL面试问题
  11. 获取网页源代码 python_python 获取网页源代码
  12. 【个人笔记】OpenCV4 C++ 快速入门 17课
  13. 手机语音混响软件_手机混响软件 如何把微信里的语音转发出去 有什么好用的变声软件 安卓微信语音转发插件...
  14. 汽车ABS结构和工作原理分析
  15. hibernate二级缓存作用、配置
  16. 发布infopath模板到sharepoint站点(Infopath 2007)
  17. 6 数据的表现形式常量以及常量的几种类型
  18. 基于OpenCV的图片电影换背景小实验(可用于证件照替换背景)_计算机视觉
  19. 中国互联网流行文化缔造者百度贴吧,如何拥抱新时代?
  20. 在香港不能用GPRS上網(转)

热门文章

  1. 用香港服务器建收费网站,使用香港站群服务器搭建网站的好处有哪些?
  2. echart 折线从左到右动画效果_echarts之自动切换折线图
  3. 怎么删除计算机管理员用户密码,小编手把手教你Win10系统如何删除管理员账户密码...
  4. 计算机应用与软件是csci吗,计算机与信息技术学院
  5. linux 添加本地源,linux 添加本地yum源
  6. java 注解 属性 类型_收藏!你一定要知道的Java8中的注解
  7. mysql怎么查看代码_MySQL中的编码查看与设置(转载)
  8. 计算机学院考勤管理办法,计科学院进一步加强课堂考勤实施意见(试行)
  9. 【MFC系列-第32天】控件自绘技术
  10. Windows编程之调用Matlab