Swift很屌胸私,開(kāi)發(fā)自定義View可以說(shuō)so easy酿傍。
大部分iOS初學(xué)者都會(huì)看斯坦福白胡子老頭的視頻弛秋, 講的確實(shí)挺好的。 在最新的iOS9第4課講了自定義UIView铺韧, 根據(jù)視頻寫(xiě)個(gè)Demo多矮,并使用定時(shí)器實(shí)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)畫(huà)。
自定義View動(dòng)畫(huà)的實(shí)現(xiàn)思路: 使用定時(shí)器或子線程每隔一段時(shí)間刷新一次界面哈打, 界面重繪時(shí)要使用不同的參數(shù)塔逃, 實(shí)現(xiàn)視覺(jué)上的動(dòng)畫(huà)效果, 其實(shí)就是幀動(dòng)畫(huà)料仗。
先介紹一下定時(shí)器湾盗, 在iOS10版本里使用Timer類(lèi)實(shí)現(xiàn)定時(shí)器的功能。 基本用法是
timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { (param) in? /*注意param是Timer類(lèi)型的參數(shù)立轧, 等于當(dāng)前Timer類(lèi)實(shí)例的引用*/
self.count += 1? //自增1
let tmp: Double = Double(self.count) / 100.0? //畫(huà)嘴的角度
print("current mouthCur: \(tmp)")
self.faceView.mouthCurvature = tmp
self.faceView.setNeedsDisplay()? //UIView的方法格粪, 即需要刷新view
//self.faceView.setNeedsLayout()
//self.faceView.layoutIfNeeded()
if self.count == 100 {
param.invalidate()? //停止定時(shí)器
}
print("counter current: \(self.count)")
})
在Android里自定義View會(huì)重寫(xiě)onDraw函數(shù), 相當(dāng)于iOS UIView的的drawRect函數(shù)肺孵。 注意: drawRect不能直接被調(diào)用, 跟Android里不能指教調(diào)用onDraw方法一樣颜阐。 在自定義UIView時(shí)平窘, Xcode的注釋里已經(jīng)說(shuō)明了drawRect函數(shù)的作用。
iOS的UIBezierPath類(lèi)似于Android Canvas的drawLine/drawRect凳怨, 使用UIBezierPath可以繪制線條和圖形瑰艘。 老頭在例子里也是使用UIBezierPath類(lèi)繪制笑臉的。? iOS沒(méi)有畫(huà)布的概念肤舞, 設(shè)置顏色時(shí)直接使用UIColor類(lèi)紫新, 不像Android那樣使用Canvas的引用。
UIView繪制界面的方法:
override func draw(_ rect: CGRect) {
print("function draw is called")
// Drawing code
UIColor.blue.set()
pathForCircleCenterAtPoint(midPoint: skullCenter, withRadius: skullRadius)? //畫(huà)圓圈
UIColor.black.set()? //切換顏色李剖, 顯示黑色眼睛
pathforEye(eye: .Left)? //畫(huà)左眼
pathforEye(eye: .Right)? //畫(huà)右眼
UIColor.red.set()
pathForMouth()
}
自定義UIView在預(yù)覽時(shí)默認(rèn)是空白的芒率, 但Swift提供個(gè)關(guān)鍵字支持預(yù)覽自定義View。 僅僅需要再自定義UIView的上面加一行代碼@IBDesignable
最上面的gif動(dòng)畫(huà)是通過(guò)定時(shí)器修改mouthCurature參數(shù)改變嘴的形狀篙顺,Swift還支持使用@IBInspectable將自定義UIView的參數(shù)作為屬性偶芍, 在storyboard里預(yù)覽。 示例:
原文:http://blog.csdn.net/brycegao321/article/details/53817222
代碼下載地址: http://download.csdn.net/detail/brycegao321/9719939