用 swift 實現(xiàn)一個簡單的動畫

在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ǔ)上可以做一個小游戲,當然這些都是后話。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,330評論 4 61
  • 我曾為面碼哭的不成樣子 我曾為兵長癡迷接近瘋狂 我曾為夏目善良默默心疼 我曾為柯南感到由衷佩服 我曾為初音歌聲傾盡...
    北遇南貓閱讀 933評論 11 21
  • 今天煮谷物奶材料放多了,本來想像韋丹說得放進冰箱等想喝就拿出來打,剛煮好有點燙,等放涼了才放,結(jié)果急急忙忙趕去上班...
    黃泳儀閱讀 201評論 0 0
  • 任何行業(yè),僅憑先天的一點天賦并不能支持你在成為高手的路上走遠。 小孩子的時候,當你在學(xué)習(xí)某一方面表現(xiàn)出優(yōu)于常人的地...
    芍小小閱讀 370評論 0 0

友情鏈接更多精彩內(nèi)容