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不响应的原因及解决方法
下一篇:《航旅纵横》添加护照方法
下一篇:《航旅纵横》添加护照方法

