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) // 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>>,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.0到1.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. } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |