做公众号要不要有自己的网站,襄阳网站建设价格低,淘宝客wordpress想,体育新闻报道扩展第三方类细心的朋友可能会发现#xff0c;我们前面计算主角的大小用的总是同一方向第一帧纹理的大小#xff0c;如果纹理大小有出入的话#xff0c;会产生较大的偏差#xff0c;最好的方法是取当前动画帧纹理的大小。不过这有些难度#xff0c;所以我们退之求其次我们前面计算主角的大小用的总是同一方向第一帧纹理的大小如果纹理大小有出入的话会产生较大的偏差最好的方法是取当前动画帧纹理的大小。不过这有些难度所以我们退之求其次计算所有帧的平均大小吧。这次我们不修改原有的第三方类因为我们上面已经熟悉了类的内部功能所以我们直接用Swift写一个类的扩展吧(Objective-C的语法...)。在项目API组中新建一个Swift文件名为CAWSpriteLayerext.swift。打开该文件将其替换为如下内容import UIKitextension 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