在app开发中无论怎样的平面设计,都比不上一个简单的动画的效果来的可爱。下面将用一个实例演示怎样实现一个小球不断运动的动画效果。
方法-animateWithDuration
(1)此方法共有5个参数:
• duration:动画从开始到结束的持续时间,单位是秒。
• delay:动画开始前等待的时间。
• options:动画执行的选项。里面可以设置动画的效果。可以使用UIViewAnimationOptions类提供的各种预置效果。
• anmations:动画效果的代码块。
• completion:动画执行完毕后执行的代码块。
可以看到我们首先需要两个控件,一个UIbutton,一个 UIview,注意这里的 view 是圆形 。
//通过tag值拿到 View
let ball = self.view.viewWithTag(10)
ball?.layer.cornerRadius = 20 (由于 View 宽高都为40,这里设为20)
这两个控件直接放在 storyboard 中,这里不再赘述.现在我们需要理清下思路,首先使小球从起始坐标点移动到下一个坐标点,于此同时当移动完成时候去调用移动到下一个坐标点的方法。然后循序往复,实现一个封闭的环路动画. 我们需要用到以下语句。
UIView.animateWithDuration(NSTimeInterval, animations: {
code
}) { (Bool) in
code
}
可以看到这个方法在后面有一个闭包执行语句,在这里我们就可以调用移动到下一个坐标点的方法。主要代码如下:
@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 做的动画就完成了。可以看到,由于这里小球都是在边界位置运动,可以联想到碰撞检测的逻辑,在此基础上可以做一个小游戏,当然这些都是后话。