iOS專案開發實戰——多個檢視的平移動畫與閉包函式的宣告與呼叫

乞力馬紮羅的雪CYF發表於2015-08-19

      在iOS動畫中,可以對不同的控制元件分別進行設定動畫效果,並且設定不同的時間延遲。並且要注意閉包函式的使用。下面我們來實現一下。

(1)在Main.storyboard中拖入三個不同顏色的View控制元件,放置在不同位置,並且繫結到程式碼中,如圖:


(3)然後在程式碼中實現如下:

import UIKit

class PositionViewController: UIViewController {

    
    @IBOutlet weak var greenSquare: UIView!
    @IBOutlet weak var redSquare: UIView!
    @IBOutlet weak var blueSquare: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func viewDidAppear(animated: Bool) {
        
        
        //閉包函式的定義;
        //注意呼叫動畫的方法中的animations,completion使用的都是閉包函式;可以直接在外面定義,裡面呼叫,這樣程式碼更加清晰;
        func completeGreen(v:Bool){
        
            println("Green Completion")
            
        }
        
        func completeRed(v:Bool){
            
            println("Red Completion")
            
        }
        
        func completeBlue(v:Bool){
            
            println("Blue Completion")
            
        }
        
        
        func animGreen(){
        
              self.greenSquare.center.x = self.view.bounds.width - self.greenSquare.center.x
        }
        
        func animRed(){
        
             self.redSquare.center.y = self.view.bounds.height - self.redSquare.center.y
        }
        
        func animBlue(){
        
            self.blueSquare.center.y = self.view.bounds.height - self.blueSquare.center.y
            self.blueSquare.center.x = self.view.bounds.width - self.blueSquare.center.x
        }
        

        //引數delay表示延遲,第一個參數列示動畫時間;
        //注意呼叫閉包函式;
        UIView.animateWithDuration(1, delay: 0, options: nil, animations: animGreen, completion: completeGreen)
        
        
        UIView.animateWithDuration(1, delay: 0.5, options: nil, animations: animRed, completion: completeRed)
        
        UIView.animateWithDuration(1, delay: 1, options: nil, animations: animBlue, completion: completeBlue)
        

        /*
        引數提示中:
        ()->Void:表示引數為空,返回值為Void,必須要實現這個閉包函式;
        <#((Bool) -> Void)?##(Bool) -> Void#>:表示引數為Bool型別,返回值為Void,後面的?表示這個閉包函式可以為空;
        
        */
        
//        UIView.animateWithDuration(<#duration: NSTimeInterval#>, delay: <#NSTimeInterval#>, options: <#UIViewAnimationOptions#>, animations: <#() -> Void##() -> Void#>, completion: <#((Bool) -> Void)?##(Bool) -> Void#>)
        
        
    }
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

}

(4)對三個不同的色塊設定了延遲,注意不要勾選“Use Auto Layout”.實現效果如下:


github主頁:https://github.com/chenyufeng1991  。歡迎大家訪問!

相關文章