Swift - 动画效果的实现

 
在iOS中,实现动画有两种方法。一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations。这三个方法都是类方法。

 
一,使用animateWithDuration来实现动画
 
(1)此方法共有5个参数:
  • duration:动画从开始到结束的持续时间,单位是秒
  • delay:动画开始前等待的时间
  • options:动画执行的选项。里面可以设置动画的效果。可以使用UIViewAnimationOptions类提供的各种预置效果
  • anmations:动画效果的代码块
  • completion:动画执行完毕后执行的代码块

(2)UIView支持动画效果的属性

  • frame:此属性包含一个矩形,即边框矩形,此值确定了当前视图在其父视图坐标系中的位置与尺寸
  • bounds:也是矩形,边界矩形,它指的是视图在其自己的坐标系中的位置和尺寸,左上角坐标永远是(0,0)
  • center:确定视图的中心点在其父视图坐标系中的位置坐标。即定义当前视图在父视图中的位置
  • alpha:视图的透明度。(但视图完全透明时,不能响应触摸消息)
  • backgroundColor:背景色
  • transform:这是一种3×3的变化矩阵。通过这个矩阵我们可以对一个坐标系统进行缩放、平移、旋转以及这两者的任意组操作。

(3)Transform(变化矩阵)的四个常用的变换方法

  • CGAffineTransformMake():返回变换矩阵
  • CGAffineTransformMakeTranslation():返回平移变换矩阵
  • CGAffineTransformMakeScale():返回缩放变换矩阵
  • CGAffineTransformMakeRotation():返回旋转变换矩阵

(4)样例1:方块初始缩小为原始尺寸1/10。在1秒的动画中复原到完整大小,同时还伴随旋转效果。

  
 

  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. //游戏方格维度
  6. var dimension:Int =
  7. //数字格子的宽度
  8. var width:CGFloat =
  9. //格子与格子的间距
  10. var padding:CGFloat =
  11.  
  12. //保存背景图数据
  13. var backgrounds:Array<UIView>!
  14.  
  15. override func viewDidLoad()
  16. {
  17. super.viewDidLoad()
  18. self.backgrounds = Array<UIView>()
  19. setupGameMap()
  20. playAnimation()
  21. }
  22.  
  23. func setupGameMap()
  24. {
  25. var x:CGFloat =
  26. var y:CGFloat =
  27.  
  28. ..<dimension
  29. {
  30. println(i)
  31. y =
  32. ..<dimension
  33. {
  34. //初始化视图
  35. var background = UIView(frame:CGRectMake(x, y, width, width))
  36. background.backgroundColor = UIColor.darkGrayColor()
  37. self.view.addSubview(background)
  38. //将视图保存起来,以备后用
  39. backgrounds.append(background)
  40. y += padding + width
  41. }
  42. x += padding+width
  43. }
  44. }
  45.  
  46. func playAnimation()
  47. {
  48. for tile in backgrounds{
  49. //先将数字块大小置为原始尺寸的 1/10
  50. tile.layer.setAffineTransform(CGAffineTransformMakeScale(0.1,0.1))
  51.  
  52. //设置动画效果,动画时间长度 1 秒。
  53. UIView.animateWithDuration(, delay:0.01,
  54. options:UIViewAnimationOptions.TransitionNone, animations:
  55. {
  56. ()-> Void in
  57. //在动画中,数字块有一个角度的旋转。
  58. tile.layer.setAffineTransform(CGAffineTransformMakeRotation())
  59. },
  60. completion:{
  61. (finished:Bool) -> Void in
  62. UIView.animateWithDuration(, animations:{
  63. ()-> Void in
  64. //完成动画时,数字块复原
  65. tile.layer.setAffineTransform(CGAffineTransformIdentity)
  66. })
  67. })
  68. }
  69. }
  70.  
  71. override func didReceiveMemoryWarning() {
  72. super.didReceiveMemoryWarning()
  73. // Dispose of any resources that can be recreated.
  74. }
  75. }

(5)样例2:只有从小变大的效果

 
  1. func playAnimation()
  2. {
  3. for tile in backgrounds{
  4. //先将数字块大小置为原始尺寸的 1/10
  5. tile.layer.setAffineTransform(CGAffineTransformMakeScale(0.1,0.1))
  6.  
  7. //设置动画效果,动画时间长度 1 秒。
  8. UIView.animateWithDuration(, delay:0.01,
  9. options:UIViewAnimationOptions.TransitionNone, animations:
  10. {
  11. ()-> Void in
  12. tile.layer.setAffineTransform(CGAffineTransformMakeScale(,))
  13. },
  14. completion:{
  15. (finished:Bool) -> Void in
  16. UIView.animateWithDuration(0.08, animations:{
  17. ()-> Void in
  18. tile.layer.setAffineTransform(CGAffineTransformIdentity)
  19. })
  20. })
  21. }
  22. }
 

(6)样例3:方块从不透明到透明的效果

 
  1. func playAnimation()
  2. {
  3. for tile in backgrounds{
  4. tile.alpha = ;
  5.  
  6. //设置动画效果,动画时间长度 1 秒。
  7. UIView.animateWithDuration(, delay:0.01,
  8. options:UIViewAnimationOptions.CurveEaseInOut, animations:
  9. {
  10. ()-> Void in
  11. },
  12. completion:{
  13. (finished:Bool) -> Void in
  14. UIView.animateWithDuration(, animations:{
  15. ()-> Void in
  16. tile.alpha =
  17. })
  18. })
  19. }
  20. }
 

二,使用beginAnimations和commitAnimations方法来实现动画

  • beginAnimations:此方法开始一个动画块,调用commitAnimations结束一个动画块,并且动画块是允许嵌套的。
  • commitAnimations:此方法用于结束一个动画块,动画是在一个独立的线程中运行的,动画在生效时,所有应用程序不会中断。

在beginAnimations和commitAnimations中间的代码中,我们可以设置各种动画的属性。比如持续时间,使用哪种预置的动画效果等。

(1)淡入,淡出,移动,改变大小动画

 
  1. //淡出动画
  2. UIView.beginAnimations(nil, context: nil)
  3. UIView.setAnimationDuration(2.0)
  4. imageView.alpha = 0.0
  5. UIView.commitAnimations()
  6.  
  7. //淡入动画
  8. UIView.beginAnimations(nil, context: nil)
  9. UIView.setAnimationDuration(2.0)
  10. imageView.alpha = 1.0
  11. UIView.commitAnimations()
  12.  
  13. //移动动画
  14. UIView.beginAnimations(nil, context: nil)
  15. UIView.setAnimationDuration(2.0)
  16. imageView.center = CGPointMake(, )
  17. UIView.setAnimationCurve(UIViewAnimationCurve.EaseOut) //设置动画相对速度
  18. UIView.commitAnimations()
  19.  
  20. //大小调整动画
  21. UIView.beginAnimations(nil, context: nil)
  22. UIView.setAnimationDuration(2.0)
  23. imageView.frame = CGRectMake(,,,)
  24. UIView.commitAnimations()

(2)两个视图切换的过渡动画 
  UIViewAnimationTransition定义了5种过渡动画类型:

  • None:无过渡动画效果
  • FlipFromLeft:从左侧向右侧翻转
  • FlipFromRight:从右侧向左侧翻转
  • CurlUp:向上卷数翻页
  • CurlDown:向下翻页
 
  1. var redView:UIView = UIView(frame: CGRectMake(,,,))
  2. redView.backgroundColor = UIColor.redColor()
  3. self.view.insertSubview(redView, atIndex: )
  4.  
  5. var blueView:UIView = UIView(frame: CGRectMake(,,,))
  6. blueView.backgroundColor = UIColor.blueColor()
  7. self.view.insertSubview(blueView, atIndex: )
  8.  
  9. UIView.beginAnimations(nil, context: nil)
  10. UIView.setAnimationDuration(4.0)
  11. UIView.setAnimationTransition(UIViewAnimationTransition.CurlUp, forView: self.view, cache: true)
  12. self.view.exchangeSubviewAtIndex(, withSubviewAtIndex: )
  13. UIView.commitAnimations()
(3)页面或元件翻转效果

 
  1. //将整个主视图面板实现一个翻转效果
  2. UIView.beginAnimations("animation", context: nil)
  3. UIView.setAnimationDuration()
  4. UIView.setAnimationCurve(UIViewAnimationCurve.EaseInOut)
  5. UIView.setAnimationTransition(UIViewAnimationTransition.FlipFromLeft, forView: self.view, cache: false)
  6. UIView.commitAnimations()

本文转自:http://www.hangge.com

iOS开发——动画篇Swift篇&动画效果的实现的更多相关文章

  1. iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用

    swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...

  2. iOS开发——新特性Swift篇&Swift 2.0 异常处理

    Swift 2.0 异常处理 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主要围绕这个方面进行讨论. 如何建造异常类型? 在 i ...

  3. iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画

    CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形 ...

  4. iOS开发——网络编程Swift篇&Alamofire详解

    Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...

  5. ios开发——实用技术总结Swift篇&swift常用开发技术总结

    swift常用开发技术总结 懒加载:属性,数组(字典),控件... 数组(懒加载): lazy var shops:Array<Dictionary<String, String>& ...

  6. iOS开发——网络编程Swift篇&(八)SwiftyJSON详解

    SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...

  7. iOS开发零基础--Swift篇 元组

    元组的介绍 元组是Swift中特有的,OC中并没有相关类型 它是什么呢? 它是一种数据结构,在数学中应用广泛 类似于数组或者字典 可以用于定义一组数据 组成元组类型的数据可以称为“元素” 元组的定义 ...

  8. iOS开发零基础--Swift篇 循环

    循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...

  9. iOS开发零基础--Swift篇:逻辑分支

    一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二. if分支语句 和OC中if语句有一定的区别 判断句可以不加() 在Swift的判断句中必须有 ...

  10. iOS开发零基础--Swift篇:Swift中数据类型

    Swift类型的介绍 Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等 先了解整型和浮点型 整型 有符号 Int8 : 有符号8位整型 Int16 : 有符号16位整型 Int32 ...

随机推荐

  1. 你今天Python了吗?(上)

    你今天Python了吗?为了提高你的生产效率,赶快去关注一下小蟒蛇的成长吧!别再把Python当作你的业余爱好了,她能为你做手头上几乎所有的工作,而且能做得更好,也让你把写代码看成是一种真正的乐趣.为 ...

  2. JavaScript中的重载解读

    在JavaScript中有一种特殊的数据类型---Function类型,JavaScript的每个函数都是Function类型的实例.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与 ...

  3. Ubuntu 软件包管理详解

    原文转载自:http://www.cppblog.com/jb8164/archive/2009/01/09/71583.html Ubuntu 方便宜用,最值得让人称道的便是其安装软件的方式, 一条 ...

  4. [Hive - Tutorial] Creating, Showing, Altering, and Dropping Tables

    Creating, Showing, Altering, and Dropping Tables See Hive Data Definition Language for detailed info ...

  5. 【Hadoop学习】HDFS中的集中化缓存管理

    Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146398.html 概述 ...

  6. uva202:循环小数(循环节+抽屉原理)

    题意: 给出两个数n,m,0<=n,m<=3000,输出n/m的循环小数表示以及循环节长度. 思路: 设立一个r[]数组记录循环小数,u[]记录每次的count,用于标记,小数计算可用 r ...

  7. 为了以后愉快的玩耍,Virtualbox安装Ubuntu

    为了以后愉快的玩耍,Virtualbox安装Ubuntu 每次安装虚拟机都是总要折腾一下,毕竟不是特别熟悉,几个小细节总要google半天,为了以后能愉快的玩耍.把这些问题都记录下来,免得再折腾. 此 ...

  8. POJ 2253 Frogger (dijkstra 最大边最小)

    Til the Cows Come Home 题目链接: http://acm.hust.edu.cn/vjudge/contest/66569#problem/A Description The i ...

  9. Spring Autowiring by Name

    In Spring, "Autowiring by Name" means, if the name of a bean is same as the name of other ...

  10. Linux的运行级别和chkconfig用法

    Linux的运行级别和chkconfig用法        一.Linux的运行级别 在装MySQL的时候,才知道了Linux的运行级别这么一回事.汗…自己太水了…下面总结一下: 什么是运行级别呢?简 ...