在app開發(fā)中無論怎樣的平面設(shè)計,都比不上一個簡單的動畫的效果來的可愛。下面將用一個實例演示怎樣實現(xiàn)一個小球不斷運動的動畫效果。

小球運動.gif
方法-animateWithDuration
(1)此方法共有5個參數(shù):
? duration:動畫從開始到結(jié)束的持續(xù)時間,單位是秒。
? delay:動畫開始前等待的時間。
? options:動畫執(zhí)行的選項。里面可以設(shè)置動畫的效果??梢允褂肬IViewAnimationOptions類提供的各種預(yù)置效果。
? anmations:動畫效果的代碼塊。
? completion:動畫執(zhí)行完畢后執(zhí)行的代碼塊。
可以看到我們首先需要兩個控件,一個UIbutton,一個 UIview,注意這里的 view 是圓形 。
//通過tag值拿到 View
let ball = self.view.viewWithTag(10)
ball?.layer.cornerRadius = 20 (由于 View 寬高都為40,這里設(shè)為20)
這兩個控件直接放在 storyboard 中,這里不再贅述.現(xiàn)在我們需要理清下思路,首先使小球從起始坐標點移動到下一個坐標點,于此同時當移動完成時候去調(diào)用移動到下一個坐標點的方法。然后循序往復(fù),實現(xiàn)一個封閉的環(huán)路動畫. 我們需要用到以下語句。
UIView.animateWithDuration(NSTimeInterval, animations: {
code
}) { (Bool) in
code
}
可以看到這個方法在后面有一個閉包執(zhí)行語句,在這里我們就可以調(diào)用移動到下一個坐標點的方法。主要代碼如下:
@IBAction func btnClick(sender: UIButton) {
self.aMove()
}
func aMove() {
let ball = self.view.viewWithTag(10)
UIView.animateWithDuration(2, animations: {
ball?.frame.origin.x = 0
ball?.frame.origin.y = self.height/2-20
}) { (aFinished) in
if aFinished {
self.bMove()
}
}
}
func bMove() {
let ball = self.view.viewWithTag(10)
UIView.animateWithDuration(2, animations: {
ball?.frame.origin.x = self.width/2-20
ball?.frame.origin.y = self.height-40
}) { (bFinished) in
self.cMove()
}
}
func cMove() {
let ball = self.view.viewWithTag(10)
UIView.animateWithDuration(2, animations: {
ball?.frame.origin.x = self.width-40
ball?.frame.origin.y = self.height/2-20
}) { (cFinished) in
self.dMove()
}
}
func dMove() {
let ball = self.view.viewWithTag(10)
UIView.animateWithDuration(2, animations: {
ball?.bounds.origin.x = self.width/2-20
ball?.bounds.origin.y = 0
}) { (dFinished) in
self.aMove()
}
}
至此一個簡單用 swift 做的動畫就完成了??梢钥吹剑捎谶@里小球都是在邊界位置運動,可以聯(lián)想到碰撞檢測的邏輯,在此基礎(chǔ)上可以做一個小游戲,當然這些都是后話。