swift Animation-CABasicAnimation

简介: swift Animation-CABasicAnimation

CABasicAnimation的一些简单实现的动画,例如移动、透明度、翻转等等。方法里面传入一个CALayer类或者子类就可以了


  • 移动动画position
    func addLayerAnimationPosition(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "position")
    //开始的位置
    animation.fromValue = NSValue(CGPoint: layer.position)
    //移动到的位置
    animation.toValue = NSValue(CGPoint: CGPointMake(120, 200))
    //持续时间
    animation.duration = 3
    //运动后的位置保持不变(layer的最后位置是toValue)
    animation.removedOnCompletion = false
    animation.fillMode = kCAFillModeForwards


//添加动画
  layer.addAnimation(animation, forKey: "addLayerAnimationPosition")
 }


  • 透明度 opacity
    func addLayerAnimationOpacity(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "opacity")
    animation.fromValue = 1
    animation.toValue = 0
    animation.duration = 3


layer.addAnimation(animation, forKey: "addLayerAnimationOpacity")
 }


  • 变大与位置 bounds
    func addLayerAnimationBounds(layer:CALayer) {
    let animation = CABasicAnimation(keyPath: "bounds")
    animation.toValue = NSValue(CGRect:CGRectMake(130, 200, 140, 140))
    animation.duration = 3
    animation.repeatCount = 1


layer.addAnimation(animation, forKey: "addLayerAnimationBounds")
 }


  • 由小变大 bounds.size
    func addLayerAnimationBoundsSize(layer:CALayer) {
    let animation = CABasicAnimation(keyPath: "bounds.size")
    animation.fromValue = NSValue(CGSize: layer.bounds.size)
    animation.toValue = NSValue(CGSize:CGSizeMake(layer.bounds.size.width+20, layer.bounds.size.height+20))
    animation.duration = 3
    animation.repeatCount = 1


layer.addAnimation(animation, forKey: "addLayerAnimationBoundsSize")
 }


  • 改变颜色 backgroundColor
    func addLayerAnimationBackgroundColor(layer:CALayer) {
    let animation = CABasicAnimation(keyPath: "backgroundColor")
    animation.toValue = UIColor.blueColor().CGColor
    animation.duration = 3
    animation.repeatCount = 1


layer.addAnimation(animation, forKey: "addLayerAnimationMargin")
}


  • 渐变圆角 cornerRadius
    func addLayerAnimationCornerRadius(layer:CALayer) {
    let animation = CABasicAnimation(keyPath: "cornerRadius")
    animation.toValue = 30
    animation.duration = 3
    animation.repeatCount = 1


layer.addAnimation(animation, forKey: "addLayerAnimationCornerRadius")
 }


  • 改变边框border的大小(图形周围边框,border默认为黑色), borderWidth
    func addLayerAnimationBorderWidth(layer:CALayer) {
    let animation = CABasicAnimation(keyPath: "borderWidth")
    animation.toValue = 10
    animation.duration = 3
    animation.repeatCount = 1


layer.addAnimation(animation, forKey: "addLayerAnimationBorderWidth")
  }


  • 改变layer内容(图片),注意如果想要达到改变内容的动画效果,首先在运行动画之前定义好layer的contents contents
    func addLayerAnimationContents(layer:CALayer) {
    let animation = CABasicAnimation(keyPath: "contents")
    let toImage = UIImage.init(named: "通车辆设计矢量素材-06.png")?.CGImage
    animation.toValue = toImage
    animation.duration = 3
    animation.repeatCount = 1


layer.addAnimation(animation, forKey: "addLayerAnimationBounds")
 }


  • 缩放、放大 transform.scale
    func addLayerAnimationTransformScale(layer:CALayer) {
    let animation = CABasicAnimation(keyPath: "transform.scale")
    //开始时的倍率
    animation.fromValue = 1.0
    //结束时的倍率
    animation.toValue = 0.5
    animation.duration = 3
    animation.repeatCount = 1
    animation.autoreverses = true


layer.addAnimation(animation, forKey: "addLayerAnimationScale")
  }


  • 旋转动画(翻转,沿着X轴) transform.rotation.x
    func addLayerAnimationTranformRotationX(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "transform.rotation.x")
    //旋转180度 = PI
    animation.toValue = M_PI
    animation.duration = 3
    animation.repeatCount = 1
    //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)


layer.addAnimation(animation, forKey: "addLayerAnimationTranformRotationX")
}


  • 旋转动画(翻转,沿着Y轴) transform.rotation.y
    func addLayerAnimationTranformRotationY(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "transform.rotation.y")
    //旋转180度 = PI
    animation.toValue = M_PI
    animation.duration = 3
    animation.repeatCount = 1
    //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)


layer.addAnimation(animation, forKey: "addLayerAnimationTranformRotationY")
}


  • 旋转动画(沿着Z轴) transform.rotation.z
    func addLayerAnimationTranformRotationZ(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "transform.rotation.z")
    //旋转360度 = PI2
    animation.toValue = M_PI
    2
    animation.duration = 3
    animation.repeatCount = 1
    //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)


layer.addAnimation(animation, forKey: "addLayerAnimationTranformRotationZ")
}


  • 横向移动(沿着X轴) transform.translation.x
    func addLayerAnimationTranformTranslationX(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "transform.translation.x")
    animation.toValue = 20
    animation.duration = 3
    animation.repeatCount = 1
    //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)


layer.addAnimation(animation, forKey: "addLayerAnimationTranformTranslationX")
}


  • 纵向移动(沿着Y轴) transform.translation.y
    func addLayerAnimationTranformTranslationY(layer: CALayer) {
    let animation = CABasicAnimation(keyPath: "transform.translation.y")
    animation.toValue = 20
    animation.duration = 3
    animation.repeatCount = 1
    //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)


layer.addAnimation(animation, forKey: "addLayerAnimationTranformTranslationY")
 }


目录
相关文章
|
网络协议 物联网 芯片
三张图带你入门蓝牙规范
蓝牙自从2001年发布以来,从经典蓝牙发展到了BLE蓝牙,又于2017年引入了蓝牙mesh技术,核心规范版本就于2019年年底升级到了最新的5.2版本,很多同学对蓝牙很有兴趣,但也被会被蓝牙技术里繁多的概念搞迷糊,希望通过这篇文章带大家对蓝牙技术规范有一个基本的了解。本文的面向读者是对网络技术有一定了解但对蓝牙技术不熟悉的同学。
三张图带你入门蓝牙规范
|
API
免费节假日api接口使用教程-聚合数据
免费节假日api接口使用教程-聚合数据
4963 0
免费节假日api接口使用教程-聚合数据
|
11月前
|
Ubuntu Linux 编译器
linux下交叉编译licensecc
通过本文的步骤,您可以在Linux环境下成功交叉编译LicenseCC。本文详细介绍了环境准备、工具链安装、源代码下载、CMake配置、编译和验证的全过程。希望这些内容对您的学习和工作有所帮助。
382 62
|
6月前
|
运维 安全 网络协议
打印机共享,错误代码0x00000709,0x0000011b等修复
本文介绍了多款打印机共享修复工具,适用于解决Windows系统连接共享打印机时出现的各种问题,例如错误代码0x0000011b、0x00000709等。内容涵盖问题原因分析、推荐工具介绍及详细修复步骤,帮助用户快速恢复打印机连接。
2303 0
|
前端开发
基于jeecg-boot的flowable流程增加部门经理审批功能
基于jeecg-boot的flowable流程增加部门经理审批功能
528 0
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
1339 0
|
监控 架构师 Java
JVM进阶调优系列(6)一文详解JVM参数与大厂实战调优模板推荐
本文详述了JVM参数的分类及使用方法,包括标准参数、非标准参数和不稳定参数的定义及其应用场景。特别介绍了JVM调优中的关键参数,如堆内存、垃圾回收器和GC日志等配置,并提供了大厂生产环境中常用的调优模板,帮助开发者优化Java应用程序的性能。
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
2815 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
Vue3文字提示(Tooltip)
这是一篇关于 Vue2 文字提示(Tooltip)组件的教程,支持多种自定义属性,如最大宽度、展示文本、提示文本、样式、背景色、箭头显示等,并提供了在线预览示例。组件通过监听插槽和 `requestAnimationFrame` 实现了延迟显示与隐藏效果。文章详细介绍了组件实现代码及在页面中的使用方法。
777 0
Vue3文字提示(Tooltip)
|
开发者 iOS开发
iOS App上架新规解析:如何进行App备案
iOS App上架新规解析:如何进行App备案
2693 0