Swift UIview的 层次交换 和部分动画的详解
2015-11-30 11:21
375 查看
//
// 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)
// 3、exchangeSubviewAtIndex(<#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.0到1.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.
}
}
// 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)
// 3、exchangeSubviewAtIndex(<#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.0到1.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.
}
}
相关文章推荐
- iOS Swift语言构造器注意点
- swift 基础(二)闭包、对象和类、setter&getter
- Swift 类构造器的使用
- Swift与OC 混编
- 《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则
- 《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则
- 4、Swift中UIButton的使用
- Swift 设置navigation左右两侧按钮
- swift 变量、元组、运算符
- swift按钮通过代码添加点击事件时出现unrecognized selector sent to instance 0x136ea5010错误
- Swift下弹出对话框
- Swift UIView 的多种添加方法和打标签和移除(方法的详解)、父子视图的关系
- Alamofire,SwiftJSON,MJExtension,解析Json获取对象,带参数上传图片
- Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)
- Swift 面向对象
- Swift 语言函数
- Swiftype添加站内搜索
- Swift 流程控制
- Swift基础之对话框UIAlertController
- Swift 循环、数组 字典的遍历