IOS swift中的动画的实例详解

发布时间 - 2026-01-11 03:12:51    点击率:

IOS swift中的动画的实例详解

UIView的通用动画

let view = UIView(frame: CGRectMake(10.0, 10.0, 100.0, 40.0))
self.view.addSubview(view)
view.backgroundColor = UIColor.lightGrayColor()
// 位置改变
var frame = view.frame
UIView.animateWithDuration(0.6, delay: 2.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
      () -> Void in

      frame.origin.x = 200.0
      view.frame = frame

      }) {
        (finished:Bool) -> Void in

        UIView.animateWithDuration(0.6) {
          () -> Void in

          frame.origin.x = 10.0
          view.frame = frame
        }
}

CABasicAnimation核心动画

1、CABasicAnimation类只有三个属性:

fromValue:开始值 
toValue:结束值 
Duration:动画的时间 
repeatCount:重复次数

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
let view = UILabel(frame: CGRectMake((self.view.frame.size.width - 200.0) / 2, 10.0, 200.0, 40.0))
self.view.addSubview(view)
view.text = "缩放/淡入淡出"
view.textAlignment = .Center
view.adjustsFontSizeToFitWidth = true
view.backgroundColor = UIColor.lightGrayColor()
//
let layer = view.layer
// 开始动画
// 缩放
let scaleAnimate = CABasicAnimation(keyPath: "transform.scale")
scaleAnimate.fromValue = 1.0
scaleAnimate.toValue = 1.5
scaleAnimate.autoreverses = true
scaleAnimate.repeatCount = MAXFLOAT
scaleAnimate.duration = 1.0
// 淡入淡出
let opaqueAnimate = CABasicAnimation(keyPath: "opacity")
opaqueAnimate.fromValue = 0.1
opaqueAnimate.toValue = 1
opaqueAnimate.autoreverses = true
opaqueAnimate.repeatCount = MAXFLOAT
opaqueAnimate.duration = 1.0
layer.addAnimation(scaleAnimate, forKey: "scaleAnimate")
layer.addAnimation(opaqueAnimate, forKey: "opacityAnimate")
// 组合动画
let view3 = UILabel(frame: CGRectMake(10.0, (currentView.frame.origin.y + currentView.frame.size.height + 10.0), 120.0, 40.0))
self.view.addSubview(view3)
view3.text = "组合动画"
view3.textAlignment = .Center
view3.adjustsFontSizeToFitWidth = true
view3.backgroundColor = UIColor.lightGrayColor()
//
let layer3 = view3.layer
// CAAnimationGroup组合动画效果
let rotate: CABasicAnimation = CABasicAnimation()
rotate.keyPath = "tranform.rotation"
rotate.toValue = M_PI
let scale: CABasicAnimation = CABasicAnimation()
scale.keyPath = "transform.scale"
scale.toValue = 0.0
let move: CABasicAnimation = CABasicAnimation()
move.keyPath = "transform.translation"
move.toValue = NSValue(CGPoint: CGPoint(x: 217, y: 230))
let animationGroup:CAAnimationGroup = CAAnimationGroup()
animationGroup.animations = [rotate, scale, move]
animationGroup.duration = 2.0
animationGroup.fillMode = kCAFillModeForwards
animationGroup.removedOnCompletion = false
animationGroup.repeatCount = MAXFLOAT
//
layer3.addAnimation(animationGroup, forKey: nil)

CAKeyframeAnimation关键帧动画

主要属性:

keyPath : 要设置的属性 
path : 路径 可用UIBezierPath(设置了path,将忽略values) 
duration : 动画时长 
repeatCount : 重复次数 
calculationMode : 动画计算方式 
values:每一个关键帧(设置了path,将忽略values) 
removedOnCompletion:执行完之后不删除动画 
fillMode:执行完之后保存最新的状态 
delegate:代理

let view = UILabel(frame: CGRectMake((self.view.frame.size.width - 200.0) / 2, 10.0, 200.0, 40.0))
self.view.addSubview(view)
view.text = "CAKeyframeAnimation动画"
view.backgroundColor = UIColor.lightGrayColor()
//
let layer = view.layer
// 位移
let keyAnimate = CAKeyframeAnimation(keyPath: "position")
// 设定关键帧
let value0 = NSValue(CGPoint: layer.position)
let value1 = NSValue(CGPoint: CGPointMake(layer.position.x, layer.position.y + 200))
let value2 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y + 200))
let value3 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y))
let value4 = NSValue(CGPoint: layer.position)
// 速度曲线
let tf0 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
let tf1 = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
let tf2 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
let tf3 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
keyAnimate.timingFunctions = [tf0, tf1, tf2, tf3]
// 每段执行的时间
keyAnimate.keyTimes = [0.0, 0.5, 0.6, 0.7, 1]
//
keyAnimate.values = [value0, value1, value2, value3, value4]
keyAnimate.autoreverses = false
keyAnimate.repeatCount = 3
keyAnimate.duration = 6.0
//
keyAnimate.delegate = self
//
layer.addAnimation(keyAnimate, forKey: "position")
// 代理方法
override func animationDidStart(anim: CAAnimation) {
    print("开始")
}

override func animationDidStop(anim: CAAnimation, finished flag: Bool) {
    print("结束")
}

let view3 = UILabel(frame: CGRectMake(10.0, (currentView.frame.origin.y + currentView.frame.size.height + 10.0), 60.0, 60.0))
self.view.addSubview(view3)
view3.text = "抖动"
view3.backgroundColor = UIColor.lightGrayColor()
//
let layer3 = view3.layer
// 抖动
let animation3 = CAKeyframeAnimation()
animation3.keyPath = "transform.rotation"
// (-M_PI_4 /90.0 * 5)表示-5度 。
let value31 = NSValue(CGPoint: CGPointMake(CGFloat(-M_PI_4 / 90.0 * 5.0), 0.0))
let value32 = NSValue(CGPoint: CGPointMake(CGFloat(M_PI_4 / 90.0 * 5.0), 0.0))
let value33 = NSValue(CGPoint: CGPointMake(CGFloat(-M_PI_4 / 90.0 * 5.0), 0.0))
animation3.values = [value31, value32, value33];
animation3.removedOnCompletion = false
animation3.fillMode = kCAFillModeForwards
animation3.duration = 0.2
animation3.repeatCount = MAXFLOAT
//
layer3.addAnimation(animation3, forKey: nil)

 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# IOS  # swift中的动画  # 动画的实例详解  # Swift  # 动画  # ios基于MJRefresh实现上拉刷新和下拉加载动画效果  # 利用iOS开发实现翻转扑克牌动画的方法  # iOS中利用CAEmitterLayer实现粒子动画详解  # iOS 下拉刷新动画的实现实例  # iOS 实现简单的加载等待动画示例(思路与实现)  # IOS 中动画的暂停与继续播放的详解  # 如有  # 希望能  # 谢谢大家  # 时长  # 键值  # 疑问请  # contentsRect  # bounds  # borderWidth  # contents  # masksToBounds  # position  # hidden  # mask  # cornerRadius  # transform  # scale  # repeatCount  # animationWithKeyPath  # margin 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel安装步骤详细教程_Laravel环境搭建指南  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何使用.env文件管理环境变量?(最佳实践)  如何快速生成橙子建站落地页链接?  如何挑选优质建站一级代理提升网站排名?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何用免费手机建站系统零基础打造专业网站?  Laravel如何处理异常和错误?(Handler示例)  香港服务器建站指南:免备案优势与SEO优化技巧全解析  微信小程序 五星评分(包括半颗星评分)实例代码  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Android Socket接口实现即时通讯实例代码  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Thinkphp 中 distinct 的用法解析  如何为不同团队 ID 动态生成多个独立按钮  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel如何创建自定义中间件?(Middleware代码示例)  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Android GridView 滑动条设置一直显示状态(推荐)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  香港服务器网站推广:SEO优化与外贸独立站搭建策略  android nfc常用标签读取总结  node.js报错:Cannot find module 'ejs'的解决办法  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Java遍历集合的三种方式  BootStrap整体框架之基础布局组件  Python正则表达式进阶教程_复杂匹配与分组替换解析  Mybatis 中的insertOrUpdate操作  nginx修改上传文件大小限制的方法  Laravel如何处理表单验证?(Requests代码示例)  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何实现文件上传和存储?(本地与S3配置)  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何快速搭建个人网站并优化SEO?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法