iOS开发——动画篇Swift篇&常用动画总结
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制作过渡动画(页面切换转场效果)
1,公开动画效果:
- kCATransitionFade:翻页
- kCATransitionMoveIn:弹出
- kCATransitionPush:推出
- kCATransitionReveal:移除
2,非公开动画效果:
- "cube":立方体
- "suckEffect":吸收
- "oglFlip":翻转
- "rippleEffect":波纹
- "pageCurl":卷页
- "cameraIrisHollowOpen":镜头开
- "cameraIrisHollowClose":镜头关
3,动画方向类型:
- kCATransitionFromRight:从右侧开始实现过渡动画
- kCATransitionFromLeft:从左侧开始实现过渡动画
- kCATransitionFromTop:从顶部开始实现过渡动画
- kCATransitionFromBottom:从底部开始实现过渡动画


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属性实现动画
//每次都从当前位置平移 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实现动画效果
- fromValue:开始值
- toValue:结束值
- Duration:动画的时间
- 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
(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实现关键帧动画
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篇&常用动画总结的更多相关文章
- iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画
CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形 ...
- iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用
swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...
- iOS开发——新特性Swift篇&Swift 2.0 异常处理
Swift 2.0 异常处理 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主要围绕这个方面进行讨论. 如何建造异常类型? 在 i ...
- ios开发——实用技术总结Swift篇&swift常用开发技术总结
swift常用开发技术总结 懒加载:属性,数组(字典),控件... 数组(懒加载): lazy var shops:Array<Dictionary<String, String>& ...
- iOS开发——网络编程Swift篇&Alamofire详解
Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...
- iOS开发零基础--Swift篇:Swift中数据类型
Swift类型的介绍 Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等 先了解整型和浮点型 整型 有符号 Int8 : 有符号8位整型 Int16 : 有符号16位整型 Int32 ...
- iOS开发——数据持久化Swift篇&文件目录路径获取(Home目录,文档目录,缓存目录等)
文件目录路径获取(Home目录,文档目录,缓存目录等) iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.下面介绍常用的程序文件夹目录: 1,Home ...
- iOS开发——网络编程Swift篇&(八)SwiftyJSON详解
SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...
- iOS开发零基础--Swift篇 元组
元组的介绍 元组是Swift中特有的,OC中并没有相关类型 它是什么呢? 它是一种数据结构,在数学中应用广泛 类似于数组或者字典 可以用于定义一组数据 组成元组类型的数据可以称为“元素” 元组的定义 ...
- iOS开发零基础--Swift篇 循环
循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...
随机推荐
- hdu 2870(dp求最大子矩阵)
题意:让你求的是由同一字母组成的最大子矩阵,w可以变成a或者b,x可以变成b或者c,y可以变成a或者c,z可以变成a或者b或者c. 分析:这是hdu 1506.hdu 1505的加强版,具体的分析看我 ...
- C# winform 登录 单例模式(转)
主界面配置代码: frmLogin Codz program.cs 代码 static class Program { public static EventWaitHandle ProgramSta ...
- 《Python 学习手册4th》 第十二章 if测试和语法规则
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- ARM指令协处理器处理指令
ARM支持16个协处理器,在程序执行过程中,每个协处理器忽略属于ARM处理器和其他协处理器指令,当一个协处理器硬件不能执行属于她的协处理器指令时,就会产生一个未定义的异常中断,在异常中断处理程序中,可 ...
- MySQL CURDATE() 函数
定义和用法 CURDATE() 函数返回当前的日期. 语法 CURDATE() 实例 例子 1 下面是 SELECT 语句: SELECT NOW(),CURDATE(),CURTIME() 结果类似 ...
- [算法] 选择排序 Selection sort
选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然 ...
- ArrayList、LinkedList、HashMap的遍历及遍历过程中增、删元素
ArrayList.LinkedList.HashMap是Java中常用到的几种集合类型,遍历它们是时常遇到的情况.当然还有一些变态的时候,那就是在遍历的过程中动态增加或者删除其中的元素. 下面的例子 ...
- 1分钟内检查Linux服务器性能的10条命令
如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?Netflix性能工程团队的Brendan Gregg写下了这篇博文,来看他们是怎样通过十条命 ...
- URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
Palindromes and Super Abilities 2 题目链接: http://acm.hust.edu.cn/vjudge/contest/126823#problem/E Descr ...
- OAuth2-Server-php
Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的 ...