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,170)"> View2.backgroundColor = UIColor.grayColor()

self.view.addSubview(View2)

//创建第三个View

let View3 = UIView(frame: CGRectMake(120,120,170)"> 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>>,0)"> *******************************************************

3<_UILayoutGuide: 0x7f932ad10d30; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7f932ad0d8d0>>,0)"> 4<UIView: 0x7f932acb79e0; frame = (110 110; 100 100); layer = <CALayer: 0x7f932acb7b50>>,0)"> 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)

}) { (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)

}

/*

以上两个动画的运行顺序是 1 ———— 2————————3

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


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

View1.frame = CGRectMake(120,100)

}) { (finished) -> Void in

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


}

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

/*

usingSpringWithdamping:弹簧动画的阻尼值,也就是相当于摩擦力的大小,该属性的值从0.01.0之间,越靠近0,阻尼越小,弹动的幅度越大,反之阻尼越大,弹动的幅度越小,如果大道一定程度,会出现弹不动的情况。

initialSpringVeLocity:弹簧动画的速率,或者说是动力。值越小弹簧的动力越小,弹簧拉伸的幅度越小,反之动力越大,弹簧拉伸的幅度越大。这里需要注意的是,如果设置为0,表示忽略该属性,由动画持续时间和阻尼计算动画的效果

*/

UIView.animateWithDuration(10,usingSpringWithdamping: 1,initialSpringVeLocity: 1,options: UIViewAnimationoptions.CurveEaseInOut,animations: { () -> Void in

View1.frame = CGRectMake(150,100)


}) { ( finished) -> Void in

View1.frame = CGRectMake(120, 300,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.

}



}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...