1. 程式人生 > >Swift UIview的 層次交換 和部分動畫的詳解

Swift UIview的 層次交換 和部分動畫的詳解

//

//  ViewController.swift

//  Swift_004

//

//  Created by 周雙建 on 15/11/30.

//  Copyright © 2015 周雙建. All rights reserved.

//

//Swift  的多個View的介面交換和單個View的動畫

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

//建立第一個View

    let  View1 = UIView

(frame: CGRectMake(10,10,100,100))

        View1.backgroundColor = UIColor.redColor()

        self.view.addSubview(View1)

//建立第二個View

    let  View2 = UIView(frame: CGRectMake(110,110,100,100))

        View2.backgroundColor = UIColor.grayColor()

        self.view.addSubview(View2)

//建立第三個View

    let  View3 = UIView

(frame: CGRectMake(120,120,100,100))

        View3.backgroundColor = UIColor.greenColor()

        self.view.addSubview(View3)

/**************************************************************/

//view 的前後交換

// 1、把View 移動到所有檢視的最上面

self.view.bringSubviewToFront(View1)

// 2、把View移動到所有檢視的最下面

        self.view.sendSubviewToBack

(View3)

// 3exchangeSubviewAtIndex(<#T##index1: Int##Int#>, withSubviewAtIndex: <#T##Int#>)   這是Index1 的子檢視和下標 index2 的下標交換

        self.view.exchangeSubviewAtIndex(0, withSubviewAtIndex:2)

        print(self.view.subviews)

//注意    0  2  交換 是沒有效果的  這是因為  下標為2 的不是View

/*  列印結果

          1[<UIView: 0x7f932acb74b0; frame = (100 100; 100 100); layer = <CALayer: 0x7f932acb7620>>,

        ***************************************************

          2<_UILayoutGuide: 0x7f932acb5a40; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7f932acb5710>>,

        *******************************************************

          3<_UILayoutGuide: 0x7f932ad10d30; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7f932ad0d8d0>>,

          4<UIView: 0x7f932acb79e0; frame = (110 110; 100 100); layer = <CALayer: 0x7f932acb7b50>>, 

          5<UIView: 0x7f932acb7c40; frame = (120 120; 100 100); layer = <CALayer: 0x7f932acb7db0>>]

        */

/**********************************************************/

// 下面  我們進行動畫  

//  先將後兩個View隱藏

        View2.hidden = true

        View3.hidden = true

//這是關鍵幀動畫的新增

        UIView.animateKeyframesWithDuration(4, delay: 1, options: UIViewKeyframeAnimationOptions.CalculationModeDiscrete, animations: { () -> Void in

            //1

                 View1.frame = CGRectMake(100, 100, 100, 100)

            }) { (finished) -> Void in

            //3

                 View1.transform = CGAffineTransformMakeScale(0.3, 0.2)

        }

        /*

        1.常規動畫屬性設定(可以同時選擇多個進行設定)

        UIViewAnimationOptionLayoutSubviews:動畫過程中保證子檢視跟隨運動。

        UIViewAnimationOptionAllowUserInteraction:動畫過程中允許使用者互動。

        UIViewAnimationOptionBeginFromCurrentState:所有檢視從當前狀態開始執行。

        UIViewAnimationOptionRepeat:重複執行動畫。

        UIViewAnimationOptionAutoreverse :動畫執行到結束點後仍然以動畫方式回到初始點。

        UIViewAnimationOptionOverrideInheritedDuration:忽略巢狀動畫時間設定。

        UIViewAnimationOptionOverrideInheritedOptions :不繼承父動畫設定或動畫型別。

        2.動畫模式設定(同前面關鍵幀動畫動畫模式一一對應,可以從其中選擇一個進行設定)

        UIViewKeyframeAnimationOptionCalculationModeLinear:連續運算模式。

        UIViewKeyframeAnimationOptionCalculationModeDiscrete :離散運算模式。

        UIViewKeyframeAnimationOptionCalculationModePaced:均勻執行運算模式。

        UIViewKeyframeAnimationOptionCalculationModeCubic:平滑運算模式。

        UIViewKeyframeAnimationOptionCalculationModeCubicPaced:平滑均勻運算模式。

        */

/**********************************************************/

// 動畫持續兩秒

        UIView.animateWithDuration(2) { () -> Void in

            //2

            View1.transform = CGAffineTransformMakeScale(1, 1)

            View1.frame = CGRectMake(220, 100, 100, 100)

        }

        /*

        以上兩個動畫的執行順序是  1    ———— 2————————3

        */

/**********************************************************/

        UIView.animateWithDuration(4, delay: 1, options: UIViewAnimationOptions.AllowAnimatedContent, animations: { () -> Void in

            View1.frame = CGRectMake(120, 100, 100, 100)

            }) { (finished) -> Void in

                View1.frame = CGRectMake(120, 50, 100, 100)

        }

/**********************************************************/

        /*

        usingSpringWithDamping:彈簧動畫的阻尼值,也就是相當於摩擦力的大小,該屬性的值從0.01.0之間,越靠近0,阻尼越小,彈動的幅度越大,反之阻尼越大,彈動的幅度越小,如果大道一定程度,會出現彈不動的情況。

        initialSpringVelocity:彈簧動畫的速率,或者說是動力。值越小彈簧的動力越小,彈簧拉伸的幅度越小,反之動力越大,彈簧拉伸的幅度越大。這裡需要注意的是,如果設定為0,表示忽略該屬性,由動畫持續時間和阻尼計算動畫的效果。

        */

        UIView.animateWithDuration(10, delay: 1, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in

            View1.frame = CGRectMake(150, 100, 100, 100)

            }) { ( finished) -> Void in

                View1.frame = CGRectMake(120, 300, 100, 100)

        }

/**********************************************************/

// Do any additional setup after loading the view, typically from a nib.

    }

    override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

    }

}