2019独角兽企业重金招聘Python工程师标准>>>

iOS核心动画详解swift版---基础动画

  • 创建工程,添加2个ViewController,通过rootViewController设置显示的ViewController
  • 第一个ViewController实现基础动画 ####1.position动画,通过移动position移动位置 实现代码如下:
func position() {// 声明一个基础动画let ani = CABasicAnimation(keyPath: "position")// 设置动画toValue,也就是要移动到那个位置ani.toValue = NSValue(CGPoint: CGPointMake(300, 300))// 设置动画曲线:线性/先快后慢/先慢后快等ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)// 代理ani.delegate = self// 设置动画结束后不移除,需要以下2个属性设置共同完成ani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;// 添加动画self.testView.layer.addAnimation(ani, forKey: nil)
}

####2.rotation动画,实现通过x,y,z轴的旋转 实现代码如下:

func rotationX() {let ani = CABasicAnimation(keyPath: "transform.rotation.x")ani.toValue = NSNumber.init(double: M_PI)ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)ani.delegate = selfani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;self.testView.layer.addAnimation(ani, forKey: nil)
}

####3.scale动画,放大或者缩小一定的倍数 代码如下:

func scale() {let ani = CABasicAnimation(keyPath: "transform.scale")ani.toValue = NSNumber(int: 2)ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)ani.delegate = selfani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;self.testView.layer.addAnimation(ani, forKey: nil)
}

####4.translation动画,直接移动到某个位置(与position对比) 代码如下:

func translation() {let ani = CABasicAnimation(keyPath: "transform.translation")ani.toValue = NSValue(CGPoint: CGPointMake(-50, -50))ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)ani.delegate = selfani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;self.testView.layer.addAnimation(ani, forKey: nil)
}

####5.opacity动画,透明度/模糊度 代码如下:

func opacity() {let ani = CABasicAnimation(keyPath: "opacity")ani.toValue = NSNumber.init(float: 0.3)ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)ani.delegate = selfani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;self.testView.layer.addAnimation(ani, forKey: nil)
}

####6.cornerRadius,borderWidth动画:设置圆角,以及边框宽度(需要设置view的layer.masksToBounds) 代码如下:

// 圆角
func cornerRadius() {let ani = CABasicAnimation(keyPath: "cornerRadius")ani.toValue = NSNumber.init(float: 50)ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)ani.delegate = selfani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;self.testView.layer.addAnimation(ani, forKey: nil)
}
// 边框宽度
func borderWidth() {let ani = CABasicAnimation(keyPath: "borderWidth")ani.toValue = NSNumber.init(float: 2)ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)ani.delegate = selfani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;self.testView.layer.addAnimation(ani, forKey: nil)
}

####7.contents动画,修改view的内容 代码如下:

func contents() {let ani = CABasicAnimation(keyPath: "contents")ani.toValue = UIImage.init(named: "12.png")?.CGImageani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)ani.delegate = selfani.removedOnCompletion = false;ani.fillMode = kCAFillModeForwards;self.testView.layer.addAnimation(ani, forKey: nil)
}

###最后是动画的代理方法

// MARK: - 代理方法
// 动画开始
override func animationDidStart(anim: CAAnimation) {print("动画开始")
}
// 动画结束
override func animationDidStop(anim: CAAnimation, finished flag: Bool) {print("动画结束")dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(3.0 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {self.testView.layer.removeAllAnimations()print("删除动画")}
}
  • 最后附上github地址:iOS核心动画demo,喜欢的可以给星支持一下啦~~,另外核心动画高级篇可以参考下一篇博客:iOS核心动画高级篇

转载于:https://my.oschina.net/ozawa4865/blog/714904

iOS核心动画详解swift版----基础动画相关推荐

  1. 苹果iOS开发系列--详解Swift 3.0语言的重大变化

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

  2. vue3过渡和动画详解

    vue3过渡和动画详解 一.认识动画 二.Vue的transition动画 三.Transition组件的原理 四.class添加的时机和命名规则 五.过渡css动画 六.同时设置过渡和动画 七.过渡 ...

  3. ext核心API详解

    http://hi.baidu.com/j2me/profile 1 EXT核心API详解(一)-Ext 1 EXT核心API详解(二)-Array/Date/Function/Number/Stri ...

  4. unity导出面板详解(pc版)

    unity导出面板详解(pc版) 目录 Resolution and Presentation(分辨率和显示) Fullscreen Mode(全屏模式) 全屏模式 参数 功能 Fullscreen ...

  5. android动画详解

    转自:工匠若水 http://blog.csdn.net/yanbober 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今天来一发A ...

  6. html盒子移动动画代码,详解盒子端CSS动画性能提升

    流畅动画的标准 理论上说,FPS 越高,动画会越流畅,目前大多数设备的屏幕刷新率为 60 次/秒,所以通常来讲 FPS 为 60frame/s 时动画效果最好,也就是每帧的消耗时间为 16.67ms. ...

  7. 学习笔记-Flutter 动画详解(一)

    Flutter 动画详解(一) 本文主要介绍了动画的原理相关概念,对其他平台的动画做了一个简要的梳理,并简要的介绍了Flutter动画的一些知识. 1. 动画介绍 动画对于App来说,非常的重要.很多 ...

  8. docker多个容器一起打包_详解Docker 容器基础系统镜像打包

    因为容器本身是共享宿主操作系统内核,所以容器基础系统镜像包本身就是一个标准的 Linux rootfs + 用户自定义的工具.根据这个思路,我们就可以构建一个自己的容器基础系统镜像. 构建标准的 Li ...

  9. Android Loader 异步加载详解一:基础概念

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70241844 本文出自[赵彦军的博客] Android Loader 异步加载详解 ...

最新文章

  1. android增加内置存储分区,详解Android10的分区存储机制(Scoped Storage)适配教程
  2. 团队愿景和团队章程的问答?
  3. JZOJ__Day 9:【普及模拟】Square
  4. IOS - 本地消息推送
  5. Good Bye 2016 //智商再次下线,边界爆炸.....
  6. C++标准程序库读书笔记-第二章新的语言特性
  7. 让Windows 7安装更快速.
  8. 二层协议--LACP协议总结
  9. Docker学习笔记08-----Docker Harbor使用详解
  10. matlab 线性规划 单纯形法
  11. C#:办公用品管理软件项目总结
  12. 字符编码那些事--彻底理解掌握编码知识
  13. 极限理论总结08:参数推断——渐近相对效率、一步MLE、似然比统计量/Wald统计量/Rao统计量
  14. 深入理解JVM的PC寄存器(Program Counter Register)
  15. 【考生说】负重前行的道路上一直都需要一个自律的你
  16. idea在类下面展示方法列表
  17. 一台Linux服务器上挂载另一台Linux服务器文件系统的方法
  18. 青龙面板--3个小毛
  19. 阿里的推荐算法竞赛的宣传稿写得很不错,很生动,吸引眼球
  20. 如何把游戏BGM文件夹中的.bank文件转换为.wav或者.mp3

热门文章

  1. 命运由我们自己抉择!
  2. 17.视图--SQL
  3. iOS之UI--CAGradientLayer
  4. 代码工程flex不显示GIF图片问题
  5. 成功之道——永远的知识
  6. 使用PHP连接POSTGRES数据库
  7. Metropolis Light Transport学习与实现
  8. java中add和addall区别,java中list的add与addall方法区别
  9. 大数据分析技术有哪些类型
  10. kafka 的pom文件_Flink的sink实战之二:kafka