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

下面是用swift实现的,这些方法我们也可以用作公共类来调用:

  1. //移动动画position
  2. func addLayerAnimationPosition(layer: CALayer) {
  3. let animation = CABasicAnimation(keyPath: "position")
  4. //开始的位置
  5. animation.fromValue = NSValue(CGPoint: layer.position)
  6. //移动到的位置
  7. animation.toValue = NSValue(CGPoint: CGPointMake(, ))
  8. //持续时间
  9. animation.duration =
  10. //运动后的位置保持不变(layer的最后位置是toValue)
  11. animation.removedOnCompletion = false
  12. animation.fillMode = kCAFillModeForwards
  13.  
  14. //添加动画
  15. layer.addAnimation(animation, forKey: "addLayerAnimationPosition")
  16. }
  17.  
  18. //透明度 opacity
  19. func addLayerAnimationOpacity(layer: CALayer) {
  20. let animation = CABasicAnimation(keyPath: "opacity")
  21. animation.fromValue =
  22. animation.toValue =
  23. animation.duration =
  24.  
  25. layer.addAnimation(animation, forKey: "addLayerAnimationOpacity")
  26.  
  27. }
  28.  
  29. //变大与位置 bounds
  30. func addLayerAnimationBounds(layer:CALayer) {
  31. let animation = CABasicAnimation(keyPath: "bounds")
  32. animation.toValue = NSValue(CGRect:CGRectMake(, , , ))
  33. animation.duration =
  34. animation.repeatCount =
  35.  
  36. layer.addAnimation(animation, forKey: "addLayerAnimationBounds")
  37. }
  38.  
  39. //由小变大 bounds.size
  40. func addLayerAnimationBoundsSize(layer:CALayer) {
  41. let animation = CABasicAnimation(keyPath: "bounds.size")
  42. animation.fromValue = NSValue(CGSize: layer.bounds.size)
  43. animation.toValue = NSValue(CGSize:CGSizeMake(layer.bounds.size.width+, layer.bounds.size.height+))
  44. animation.duration =
  45. animation.repeatCount =
  46.  
  47. layer.addAnimation(animation, forKey: "addLayerAnimationBoundsSize")
  48. }
  49.  
  50. //改变颜色 backgroundColor
  51. func addLayerAnimationBackgroundColor(layer:CALayer) {
  52. let animation = CABasicAnimation(keyPath: "backgroundColor")
  53. animation.toValue = UIColor.blueColor().CGColor
  54. animation.duration =
  55. animation.repeatCount =
  56.  
  57. layer.addAnimation(animation, forKey: "addLayerAnimationMargin")
  58. }
  59.  
  60. //渐变圆角 cornerRadius
  61. func addLayerAnimationCornerRadius(layer:CALayer) {
  62. let animation = CABasicAnimation(keyPath: "cornerRadius")
  63. animation.toValue =
  64. animation.duration =
  65. animation.repeatCount =
  66.  
  67. layer.addAnimation(animation, forKey: "addLayerAnimationCornerRadius")
  68. }
  69.  
  70. //改变边框border的大小(图形周围边框,border默认为黑色), borderWidth
  71. func addLayerAnimationBorderWidth(layer:CALayer) {
  72. let animation = CABasicAnimation(keyPath: "borderWidth")
  73. animation.toValue =
  74. animation.duration =
  75. animation.repeatCount =
  76.  
  77. layer.addAnimation(animation, forKey: "addLayerAnimationBorderWidth")
  78. }
  79.  
  80. //改变layer内容(图片),注意如果想要达到改变内容的动画效果,首先在运行动画之前定义好layer的contents contents
  81. func addLayerAnimationContents(layer:CALayer) {
  82. let animation = CABasicAnimation(keyPath: "contents")
  83. let toImage = UIImage.init(named: "通车辆设计矢量素材-06.png")?.CGImage
  84. animation.toValue = toImage
  85. animation.duration =
  86. animation.repeatCount =
  87.  
  88. layer.addAnimation(animation, forKey: "addLayerAnimationBounds")
  89. }
  90.  
  91. //缩放、放大 transform.scale
  92. func addLayerAnimationTransformScale(layer:CALayer) {
  93. let animation = CABasicAnimation(keyPath: "transform.scale")
  94. //开始时的倍率
  95. animation.fromValue = 1.0
  96. //结束时的倍率
  97. animation.toValue = 0.5
  98. animation.duration =
  99. animation.repeatCount =
  100. animation.autoreverses = true
  101.  
  102. layer.addAnimation(animation, forKey: "addLayerAnimationScale")
  103. }
  104.  
  105. //旋转动画(翻转,沿着X轴) transform.rotation.x
  106. func addLayerAnimationTranformRotationX(layer: CALayer) {
  107. let animation = CABasicAnimation(keyPath: "transform.rotation.x")
  108. //旋转180度 = PI
  109. animation.toValue = M_PI
  110. animation.duration =
  111. animation.repeatCount =
  112. //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
  113. animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
  114.  
  115. layer.addAnimation(animation, forKey: "addLayerAnimationTranformRotationX")
  116. }
  117.  
  118. //旋转动画(翻转,沿着Y轴) transform.rotation.y
  119. func addLayerAnimationTranformRotationY(layer: CALayer) {
  120. let animation = CABasicAnimation(keyPath: "transform.rotation.y")
  121. //旋转180度 = PI
  122. animation.toValue = M_PI
  123. animation.duration =
  124. animation.repeatCount =
  125. //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
  126. animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
  127.  
  128. layer.addAnimation(animation, forKey: "addLayerAnimationTranformRotationY")
  129. }
  130.  
  131. //旋转动画(沿着Z轴) transform.rotation.z
  132. func addLayerAnimationTranformRotationZ(layer: CALayer) {
  133. let animation = CABasicAnimation(keyPath: "transform.rotation.z")
  134. //旋转360度 = PI*2
  135. animation.toValue = M_PI*
  136. animation.duration =
  137. animation.repeatCount =
  138. //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
  139. animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
  140.  
  141. layer.addAnimation(animation, forKey: "addLayerAnimationTranformRotationZ")
  142. }
  143.  
  144. //横向移动(沿着X轴) transform.translation.x
  145. func addLayerAnimationTranformTranslationX(layer: CALayer) {
  146. let animation = CABasicAnimation(keyPath: "transform.translation.x")
  147. animation.toValue =
  148. animation.duration =
  149. animation.repeatCount =
  150. //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
  151. animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
  152.  
  153. layer.addAnimation(animation, forKey: "addLayerAnimationTranformTranslationX")
  154. }
  155.  
  156. //纵向移动(沿着Y轴) transform.translation.y
  157. func addLayerAnimationTranformTranslationY(layer: CALayer) {
  158. let animation = CABasicAnimation(keyPath: "transform.translation.y")
  159. animation.toValue =
  160. animation.duration =
  161. animation.repeatCount =
  162. //这里我们可以添加可以不添加,添加一个缓慢进出的动画效果(int/out)。当不添加时,匀速运动,会使用kCAMediaTimingFunctionLinear;当添加时,layer会在开始和结束时比较缓慢
  163. animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
  164.  
  165. layer.addAnimation(animation, forKey: "addLayerAnimationTranformTranslationY")
  166. }

如果我们只要看keypath的值,我们可以看到下面文章

http://www.cnblogs.com/alunchen/p/5300075.html

可以关注本人的公众号,多年经验的原创文章共享给大家。

IOS Animation-CABasicAnimation例子(简单动画实现)的更多相关文章

  1. [iOS Animation]-CALayer 隐式动画

    隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画是Core Animation库一个非常显著的 ...

  2. iOS Animation 主流炫酷动画框架(特效)收集整理 #91

    https://github.com/sxyx2008/DevArticles/issues/91

  3. ios之CABasicAnimation

    博主:最近iOS开发中用到CoreAnimation的framework来做动画效果,虽然以前也用过,但一直没有系统学习过,今天看到一篇非常详细的博文(虽然是日语,但真的写的很好),在此翻译出来供大家 ...

  4. [iOS Animation]-CALayer 显示动画

    显式动画 如果想让事情变得顺利,只有靠自己 -- 夏尔·纪尧姆 上一章介绍了隐式动画的概念.隐式动画是在iOS平台创建动态用户界面的一种直接方式,也是UIKit动画机制的基础,不过它并不能涵盖所有的动 ...

  5. Swift 实现iOS Animation动画教程

    这是一篇翻译文章.原文出处:http://www.raywenderlich.com/95910/uiview-animation-swift-tutorial 动画( animation)是iOS用 ...

  6. iOS CAReplicatorLayer 简单动画

    代码地址如下:http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记录 ...

  7. iOS开发CABasicAnimation动画理解

    1.CALayer简介 CALayer是个与UIView很类似的概念,同样有backgroundColor.frame等相似的属性,我们可以将UIView看做一种特殊的CALayer.但实际上UIVi ...

  8. iOS Core Animation学习总结(3)--动画的基本类型

    一. CABasicAnimation (基础动画) 移位: CABasicAnimation *animation = [CABasicAnimation animation]; //keyPath ...

  9. ios animation 动画效果实现

    1.过渡动画 CATransition CATransition *animation = [CATransition animation]; [animation setDuration:1.0]; ...

随机推荐

  1. ServiceStack.OrmLite中的一些"陷阱"(2)

    注:此系列不是说ServiceStack.OrmLite的多个陷阱,这仅仅个人认为是某一个陷阱(毕竟我踩坑了)而引发的思考. 前文说到了项目需要使用两种不同的数据库语言,虽说前文问题已基本解决了,但是 ...

  2. chrome浏览器插件的开启快捷键

    用鼠标去打开chrome浏览器右上角的插件,总是感觉太麻烦,例如你想用有道词典的插件查一个单词的意思,用鼠标把有道插件打开,然后再回到键盘上敲单词,真的好麻烦.现在只要设置一下插件的快捷键就OK了. ...

  3. CAD二次开发

    用C#有一段时间了,由于单位需要,开始接触CAD二次开发,网上一搜,加入CAD开发的群,零零碎碎看了一些文章和博客,没有系统地的知识,能解决一些小问题.最近开始系统学习,再次推荐两本书,一本事纸质版的 ...

  4. react 15来了

    有段时间没做react的项目了,前两天才发现react搞了一个不太小的动作,不是遵循原来的小版本号迭代,从0.14.x继续更新,而是直接跳到了15.0.X.虽然业界一直有这个观点,0.x的版本视为非稳 ...

  5. javaWeb开发小工具--MyCommonUtils

    MyCommonUtils 参考一些资料,写了这个工具类.在这个工具类中,主要实现了2个方法: 1.生成随机的序列号 uuid(): 2.将Map中的数据封装到javaBean对象中toBean(Ma ...

  6. Allegro Out Of Date Shapes原因及解决方法

    使用Allegro设计PCB板时,查看Status,经常会遇到out of date shapes的警告信息,具体如下: dynamic shape is still out of data or e ...

  7. jquery 模拟 alert 手机,pc,平板 3合一

    $.kw = { title : "System information", //默认标题 可修改 speed : 400, //默认速度 可修改 buttonName : &qu ...

  8. 【dubbo】dubbo控制台搭建

    1.gitHub上下载dubbo 2.cmd下运行 cd ~/dubbomvn clean install -Dmaven.test.skip 3.cd ~/dubbo/dubbo-admin mvn ...

  9. IOS绘制渐变背景色折线图的一种尝试

    1.绘制折线图 上次在群里看到一个折线图划的很漂亮,自己想实现一个这样的 ,但是一直没什么头绪,不知道怎么做,就开始在网上查找划线,绘 制渐变色这一块的内容,用最笨的方式,自己尝试的写了一些,也没 有 ...

  10. 我的github代码库

    我的github代码库地址:https://github.com/gooree.Enjoy coding,enjoy sharing.