swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类
擴展第三方類
細(xì)心的朋友可能會發(fā)現(xiàn),我們前面計算主角的大小用的總是同一方向第一幀紋理的大小,如果紋理大小有出入的話,會產(chǎn)生較大的偏差,最好的方法是取當(dāng)前動畫幀紋理的大小。不過這有些難度,所以我們退之求其次,計算所有幀的平均大小吧。
這次我們不修改原有的第三方類,因為我們上面已經(jīng)熟悉了類的內(nèi)部功能,所以我們直接用Swift寫一個類的擴展吧(Objective-C的語法...)。
在項目API組中新建一個Swift文件,名為CAWSpriteLayer+ext.swift。
打開該文件,將其替換為如下內(nèi)容:
import UIKit
extension CAWSpriteLayer{
func avgSizeForFrameBase(_ frameNameBase:String)->CGSize{
//待實現(xiàn)
}
}
可以看到我們在CAWSpriteLayer類的擴展里新建了方法,該方法唯一的參數(shù)為同一方向的紋理名稱前綴,即如果是向上,則會傳入 "w背" 實參,它會將所有"w背"前綴的紋理大小都加入計算。
我們前面已經(jīng)了解到,CAWSpriteLayer類中含有一個animationLayer.spriteData變量,其中有我們想要每一幀名稱、大小等等所需要的所有信息。
我們現(xiàn)在來實現(xiàn)avgSizeForFrameBase方法,將其中的注釋一行替換為如下內(nèi)容:
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正")其他方向類似。
好啦!我們已經(jīng)成功的按我們的需求擴展了第三方的類!!!
結(jié)尾
經(jīng)歷了前面這么多的內(nèi)容,大家看的一定很累,這是自然的。(雖然本貓寫的也很累...),希望大家可以略微學(xué)到一丟丟新知識,希望大家可以把它應(yīng)用到實際App開發(fā)中去 _
現(xiàn)在!拋開電腦,到了happy的時候了!沖個熱水澡,來杯冰鎮(zhèn)可樂+至尊大漢堡套餐?之類的美味吧!!!
感謝觀賞,再會!
PS:全部代碼可以到我的github中下載:
https://gitee.com/hopy/iOS-JingJin/tree/master/TPSupportsTest
總結(jié)
以上是生活随笔為你收集整理的swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创建一个带参数的formgoup_gin
- 下一篇: cstringw转lpctstr_新手必