UIView动画:

UIView动画时最基本的动画,是直接对我们界面上控件进行简单的动画效果实现,如果你只需要用到一些简单的效果,那么这个很适合你,关于UIView动画实现恨简单,

UIKit直接将动画集成到UIView类中,实现简单动画的创建过程。UIView类定义了几个内在支持动画的属性声明,当这些属性发生改变时,视图为其变化过程提供内建的动画支持。

执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码包装到一个代码块中。

 // MARK: - UIView动画  -------------------------------------

     // MARK: - UIView动画-淡入
     @IBAction func simpleAnimationFadeIn()
     {
         UIView.beginAnimations(nil, context: nil)
         UIView.setAnimationDuration(2.0)//设置动画时间
         testImageView.alpha = 0.0
         UIView.commitAnimations()

 //        //通过闭包实现 UIView淡入小狗
 //        UIView.animateWithDuration(0.3, animations: { () -> Void in
 //            self.testImageView.alpha = 0.0
 //        })
     }

     // MARK: - UIView动画-淡出
     @IBAction func simpleAnimationFadeOut()
     {
         UIView.beginAnimations(nil, context: nil)
         UIView.setAnimationDuration(2.0)//设置动画时间
         testImageView.alpha = 1.0
         UIView.commitAnimations()
     }

     // MARK: - UIView动画-移动
     @IBAction func simpleAnimationMoveCenter()
     {
         UIView.beginAnimations(nil, context: nil)
         UIView.setAnimationDuration(2.0)//设置动画时间
         testImageView.center = CGPointMake(, )
         UIView.setAnimationCurve(UIViewAnimationCurve.EaseOut)//设置动画相对速度
         UIView.commitAnimations()
     }

     // MARK: - UIView动画-大小调整
     @IBAction func simpleAnimationFrame()
     {
         UIView.beginAnimations(nil, context: nil)
         UIView.setAnimationDuration(2.0)//设置动画时间
         testImageView.frame = CGRectMake(, , , )
         UIView.commitAnimations()
     }

BLock动画(属于UIview动画)

 UIView.animateWithDuration(1.0,
     delay: 2.0,
     options: .CurveEaseInOut | .AllowUserInteraction,
     animations: {
       self.bug.center = CGPoint(x: , y: )
     },
     completion: { finished in
       println("Bug moved left!")
       self.faceBugRight()
     })
 }

 func faceBugRight() {
   if isBugDead { return }

   UIView.animateWithDuration(1.0,
     delay: 0.0,
     options: .CurveEaseInOut | .AllowUserInteraction,
     animations: {
       self.bug.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
     },
     completion: { finished in
       println("Bug faced right!")
       self.moveBugRight()
     })
 }

 func moveBugRight() {
   if isBugDead { return }

   UIView.animateWithDuration(1.0,
     delay: 2.0,
     options: .CurveEaseInOut | .AllowUserInteraction,
     animations: {
       self.bug.center = CGPoint(x: , y: )
     },
     completion: { finished in
       println("Bug moved right!")
       self.faceBugLeft()
     })
 }

 func faceBugLeft() {
   if isBugDead { return }

   UIView.animateWithDuration(1.0,
     delay: 0.0,
     options: .CurveEaseInOut | .AllowUserInteraction,
     animations: {
       self.bug.transform = CGAffineTransformMakeRotation(0.0)
     },
     completion: { finished in
       println("Bug faced left!")
       self.moveBugLeft()
     })
 }

使用CATransition制作过渡动画(页面切换转场效果)

 
CATransition动画主要在过渡时使用,比如两个页面层级改变的时候添加一个转场效果。CATransition分为两类,一类是公开的动画效果,一类是非公开的动画效果。

1,公开动画效果:

  • kCATransitionFade:翻页
  • kCATransitionMoveIn:弹出
  • kCATransitionPush:推出
  • kCATransitionReveal:移除

2,非公开动画效果:

  • "cube":立方体
  • "suckEffect":吸收
  • "oglFlip":翻转
  • "rippleEffect":波纹
  • "pageCurl":卷页
  • "cameraIrisHollowOpen":镜头开
  • "cameraIrisHollowClose":镜头关

3,动画方向类型:

  • kCATransitionFromRight:从右侧开始实现过渡动画
  • kCATransitionFromLeft:从左侧开始实现过渡动画
  • kCATransitionFromTop:从顶部开始实现过渡动画
  • kCATransitionFromBottom:从底部开始实现过渡动画
 
4,下面通过一个样例演示:
页面上添加两个分别是红色,蓝色的UIView。当点击屏幕的时候,这两个UIView层级切换,同时会有从左向右推出的效果。
 
                 
          
 import UIKit

 class ViewController: UIViewController {

     override func viewDidLoad() {
         super.viewDidLoad()

         var redView:UIView = UIView(frame: CGRectMake(,,,))
         redView.backgroundColor = UIColor.redColor()
         self.view.insertSubview(redView, atIndex: )

         var blueView:UIView = UIView(frame: CGRectMake(,,,))
         blueView.backgroundColor = UIColor.blueColor()
         self.view.insertSubview(blueView, atIndex: )
     }

     //点击切换两个红蓝视图
     override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
         var transition = CATransition()
         transition.duration = 3.0
         transition.type = kCATransitionPush //推送类型
         transition.subtype = kCATransitionFromLeft //从左侧
         self.view.exchangeSubviewAtIndex(, withSubviewAtIndex: )
         self.view.layer.addAnimation(transition, forKey: nil)
     }

     override func didReceiveMemoryWarning() {
         super.didReceiveMemoryWarning()
     }
 }

通过设置视图的transform属性实现动画

 
设置视图对象的transform属性,可以实现各种动画效果。

 
1,移动
指在同一平面内,将控件按照某个直线方向平移一定的距离。
 //每次都从当前位置平移
 self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, -2.1, -2.1)

 //每次都从最开始的位置计算平移
 self.imageView.transform = CGAffineTransformMakeTranslation(2.3, 2.3)

2,旋转

 //连续旋转
 UIView.beginAnimations(nil, context: nil)
 UIView.setAnimationDuration(3.0) //设置动画时间
 self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, CGFloat(-M_PI/))
 UIView.commitAnimations()

 //独立旋转,以初始位置旋转
 self.imageView.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI/))

3,缩放

 //连续缩放
 UIView.beginAnimations(nil, context: nil)
 UIView.setAnimationDuration(3.0) //设置动画时间
 self.imageView.transform = CGAffineTransformScale(self.imageView.transform, 1.5 ,1.5)
 UIView.commitAnimations()

 //独立缩放,以初始位置缩放
 self.imageView.transform = CGAffineTransformMakeScale(1.3, 1.3)

4,反转

 //返回初始状态
 self.imageView.transform = CGAffineTransformIdentity

 //连续反转
 UIView.beginAnimations(nil, context: nil)
 UIView.setAnimationDuration(3.0) //设置动画时间
 self.imageView.transform = CGAffineTransformConcat(self.imageView.transform,
     CGAffineTransformInvert(self.imageView.transform))
 UIView.commitAnimations()

 //独立反转,以初始位置反转
 self.imageView.transform = CGAffineTransformInvert(self.imageView.transform)

使用CABasicAnimation实现动画效果

 
1,CABasicAnimation类只有三个属性:

  • fromValue:开始值
  • toValue:结束值
  • Duration:动画的时间
 
2,通过animationWithKeyPath键值对的方式设置不同的动画效果
  • transform.scale
  • transform.scale.x
  • transform.scale.y
  • transform.rotation.z
  • opacity
  • margin
  • zPosition
  • backgroundColor
  • cornerRadius
  • borderWidth
  • bounds
  • contents
  • contentsRect
  • cornerRadius
  • frame
  • hidden
  • mask
  • masksToBounds
  • opacity
  • position
  • shadowColor
  • shadowOffset
  • shadowOpacity
  • shadowRadius
 
3,使用样例

(1)改变透明度动画(逐渐消失)

 let animation = CABasicAnimation(keyPath: "opacity")
 animation.fromValue = 1.0
 animation.toValue = 0.0
 animation.duration = 3.0
 self.imageView.layer.addAnimation(animation, forKey: "Image-opacity")
 self.imageView.alpha = 

(2)从小变大动画(还原为默认尺寸)

 et animation = CABasicAnimation(keyPath: "bounds.size")
 animation.fromValue = NSValue(CGSize: CGSizeMake(2.0, 2.0))
 animation.toValue = NSValue(CGSize: self.imageView.frame.size)
 animation.duration = 3.0
 self.imageView.layer.addAnimation(animation, forKey: "Image-expend")

使用CAKeyframeAnimation实现关键帧动画

 
1,CAKeyframeAnimation介绍

CAKeyframeAnimation可以实现关键帧动画,这个类可以实现某一属性按照一串的数值进行动画,就像是一帧一帧的制作出来一样。
 
2,使用样例(设置五个关键点坐标,图片依次按关键点移动)
 let animation = CAKeyframeAnimation(keyPath: "position")

 //设置5个位置点
 let p1 = CGPointMake(0.0, 0.0)
 let p2 = CGPointMake(, 0.0)
 let p3 = CGPointMake()
 let p4 = CGPointMake(, )
 let p5 = CGPointMake(, )

 //赋值
 animation.values = [NSValue(CGPoint: p1), NSValue(CGPoint: p2),
     NSValue(CGPoint: p3), NSValue(CGPoint: p4), NSValue(CGPoint: p5)]

 //每个动作的时间百分比
 animation.keyTimes = [NSNumber(float: 0.0), NSNumber(float: 0.4),
     NSNumber(float: 0.6), NSNumber(float: 0.8), NSNumber(float: 1.0), ]

 animation.delegate = self
 animation.duration = 6.0

 self.imageView.layer.addAnimation(animation, forKey: "Image-Move")

3,可以设置动画代理,监听开始和结束动作

 animation.delegate = self

 override func animationDidStart(anim: CAAnimation!) {
     println("动画开始")
 }

 override func animationDidStop(anim: CAAnimation!, finished flag: Bool) {
     println("动画结束")
 }

iOS开发——动画篇Swift篇&常用动画总结的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. iOS开发——数据持久化Swift篇&文件目录路径获取(Home目录,文档目录,缓存目录等)

    文件目录路径获取(Home目录,文档目录,缓存目录等)   iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.下面介绍常用的程序文件夹目录:   1,Home ...

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

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

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

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

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

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

随机推荐

  1. POJ 2096-Collecting Bugs(概率dp入门)

    题意: 有n种bug和s种系统bug,每天发现一种bug(可能已经发现过了)所有种bug被发现的概率相同,求所有bug被发现的期望天数. 分析: dp[i][j]发现i种bug,j种系统bug期望天数 ...

  2. 【剑指offer 面试题23】从上往下打印二叉树

    思路: 没啥好说的,BFS. C++: #include <iostream> #include <queue> using namespace std; struct Tre ...

  3. Hadoop对文本文件的快速全局排序

    一.背景 Hadoop中实现了用于全局排序的InputSampler类和TotalOrderPartitioner类,调用示例是org.apache.hadoop.examples.Sort. 但是当 ...

  4. 四款超棒的jQuery数字化签名插件

    在浏览器中,我们有很多方式来绘制生成签名效果,并且有很多很棒很智能的jQuery插件.数字化签名是未来的发展方向,正是这个原因我们这里收集并且推荐了四款超棒的jQuery数字化签名插件,希望大家喜欢! ...

  5. C/C++:作用域、可见性与生存期

    作用域 作用域是用来表示某个标识符在什么范围内有效. C++的作用域主要有四种:函数原型作用域.块作用域.类作用域和文件作用域. 由大到小:文件作用域>类作用域>块作用域>函数原型作 ...

  6. 数据库(class0507)

    局部变量_先声明再赋值 声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int 赋值 SET @变量名 =值 --set用 ...

  7. Blogilo:Ubuntu下“wlw”

    原文首发:http://www.ido321.com/1274.html 这一篇博客是在Ubuntu的博客客户端blogilo下发布的,感觉有点高大上,特此发布一篇博文记录一下.      博客发布在 ...

  8. cocos2d-x 不能在android真机debug的问题

    最近在做cocos2d-x开发的时候,发现在android真机上不能调试C++代码,显示如下警告信息 Ignoring packet error, continuing... warning: unr ...

  9. 【JAVA版】Storm程序整合Kafka、Mongodb示例及部署

    一.环境 一台Centos6.5主机 Mongo 3.0 Kafka_2.11-0.8.2.1 Storm-0.9.5 Zookeeper-3.4.6 java 1.7 (后因在mac上打包的jar由 ...

  10. Navicat 远程连接SQL Server 2014 Express 报08001错误

    场景:Navicat 远程连接SQL Server 2014 Express 报08001错误,经查验防火墙端口1434,1433已经打开 过程:1. 一开始觉得是连接名称问题,使用IP地址或者主机名 ...