`
yidongkaifa
  • 浏览: 4059380 次
文章分类
社区版块
存档分类
最新评论

ios 动画基础

 
阅读更多

所有核心动画的动画类都是从CAAnimation类继承而来


CAAnimation实现了CAMediaTiming协议,提供了动画的持续时间,速度,和重复计数


CAAnimation也实现了CAAction协议。该协议为图层触发一个动画动作提供了提供 标准化响应


CATransition提供了一个图层变化的过渡效果,它能影响图层的整个内容。 动画进行的时候淡入淡出(fade)、推(push)、显露(reveal)图层的内容。这些过渡效果可以扩展到你自己定制的Core Image滤镜


CAAnimationGroup允许一系列动画效果组合在一起,并行显示动画


CAPropertyAnimation是一个抽象的子类,它支持动画的显示图层的关键路径中指定的属性


CABasicAnimation简单的为图层的属性提供修改。


CAKeyframeAnimation支持关键帧动画,你可以指定的图层属性的关键路径动画,包括动画的每个阶段的价值,以及关键帧时间和计时功能的一系列值。在 动画运行是,每个值被特定的插入值替代



核心动画的CAConstraint类是一个布局管理器,它可以指定子图层类限制于你指定的约束集合。每个约束(CAConstraint类的实例封装)描述层的几何属性(左,右,顶部或底部的边缘或水平或垂直中心)的关系,关系到其同级之一的几何属性层或superlayer


核心动画的图层和Cocoa的视图在很大程度上没有一定的相似性,但是他们两者最大的区别是,图层不会直接渲染到屏幕上


试图的position坐标和anchorPoint有关


sublayerTransform属性指定的矩阵只会影响图层的子图层,而不会对 图层本身产生影响


transform属性指定的矩阵结合图层的anchorPoint属性作用于图层和图层的子图层上面


旋转的单位采用弧度(radians),而不是角度(degress)。以下两个函数,你可以在 弧度和角度之间切换


  1. <spanstyle="font-size:18px;">CGFloatDegreesToRadians(CGFloatdegrees){returndegrees*M_PI/180;};
  2. CGFloatRadiansToDegrees(CGFloatradians){returnradians*180/M_PI;};</span>



无法正常运行:

替换的办法是,你必须通过setValue:forKeyPath:或者valueForKeyPath:方法,具体如下:


  1. <spanstyle="font-size:18px;">myLayer.transform.rotation.x=0;
  2. [myLayersetValue:[NSNumbernumberWithInt:0]forKeyPath:@"transform.rotation.x"];</span>


如果一个图层的属性needsDisplayOnBoundsChan<wbr>ge被设置为YES的时候,当图层的bounds属性改变的时候,图层的内容将会被重新缓存起来。默认情况下图层的needsDisplayOnBoundsChan<wbr>ge属性值为NO。</wbr></wbr>


给CALayer提供内容

1。包含图片内容的CGImageRef来显式的设置图层的contents的属性。

2。指定一个委托,它提供或者重绘内容。

3。继承CALayer类重载显示的函数


创建一个委托类实

displayLayer:或drawLayer:inContext:


  1. <spanstyle="font-size:18px;">-(void)displayLayer:(CALayer*)theLayer
  2. {
  3. //checkthevalueofthelayer'sstatekey
  4. if([[theLayervalueForKey:@"state"]boolValue])
  5. {
  6. //displaytheyesimage
  7. theLayer.contents=[someHelperObjectloadStateYesImage];
  8. }
  9. else{
  10. //displaythenoimage
  11. theLayer.contents=[someHelperObjectloadStateNoImage];
  12. }
  13. }</span>



如果你必须重绘图层的内容,而不是通过加载图片,那你需要实现drawLayer:inContext:方法。通过委托可以决定哪些内容是需要的并使用CGContextRef来重绘内容。


实例重新缓存其内容,可以通过发送以下任何一个方法setNeedsDisplay或setNeedsDisplayInRect:的消息,亦或者设置图层的needsDisplaOnBoundsChang<wbr><span style="font-size:18px">e属性为YES</span></wbr>


CALayer的属性contentsGravity允许你在图层的边界内容修改图层的contents图片的位置或者伸缩值。默认情况下,内容的图像完全填充层的边界,忽视自然的图像 宽高比contentsGravity属性值:


CABasicAnimation提供了在图层的属性值间简单的插入。CAKeyframeAnimation提供支持关键帧动画。你指定动画的一个图层属性的关键路径,一个表示在动画的每个阶段的价值的数组,还有一个关键帧时间的数组和时间函数。


CATransition提供了一个影响整个图层的内容过渡效果。在动画显示过程中采用淡出(fade)、推出(push)、显露(reveal)图层的内容。常用的过渡效果可以通过提供你自己定制的核心图像滤镜来扩展


  1. <spanstyle="font-size:18px;">CABasicAnimation*_basicAnimation=[CABasicAnimationanimationWithKeyPath:@"opacity"];
  2. _basicAnimation.duration=3.0;
  3. _basicAnimation.repeatCount=2;
  4. _basicAnimation.autoreverses=YES;
  5. _basicAnimation.fromValue=[NSNumbernumberWithFloat:1.0];
  6. _basicAnimation.toValue=[NSNumbernumberWithFloat:0.0];
  7. [self.m_imageViewBg.layeraddAnimation:_basicAnimationforKey:@"animateOpacity"];</span>



我们可以通过animationWithKeyPath键值对的方式来改变动画

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


  1. <spanstyle="font-size:18px;">
  2. [self.ui_View.layerremoveAllAnimations];
  3. CABasicAnimation*pulse=[CABasicAnimationanimationWithKeyPath:@"transform.scale"];
  4. pulse.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut];
  5. pulse.duration=0.5+(rand()%10)*0.05;
  6. pulse.repeatCount=1;
  7. pulse.autoreverses=YES;
  8. pulse.fromValue=[NSNumbernumberWithFloat:.8];
  9. pulse.toValue=[NSNumbernumberWithFloat:1.2];
  10. [self.ui_View.layeraddAnimation:pulseforKey:nil];
  11. //bounds
  12. CABasicAnimation*anim=[CABasicAnimationanimationWithKeyPath:@"bounds"];
  13. anim.duration=1.f;
  14. anim.fromValue=[NSValuevalueWithCGRect:CGRectMake(0,0,10,10)];
  15. anim.toValue=[NSValuevalueWithCGRect:CGRectMake(10,10,200,200)];
  16. anim.byValue=[NSValuevalueWithCGRect:self.ui_View.bounds];
  17. //anim.toValue=(id)[UIColorredColor].CGColor;
  18. //anim.fromValue=(id)[UIColorblackColor].CGColor;
  19. anim.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  20. anim.repeatCount=1;
  21. anim.autoreverses=YES;
  22. [ui_View.layeraddAnimation:animforKey:nil];
  23. //cornerRadius
  24. CABasicAnimation*anim2=[CABasicAnimationanimationWithKeyPath:@"cornerRadius"];
  25. anim2.duration=1.f;
  26. anim2.fromValue=[NSNumbernumberWithFloat:0.f];
  27. anim2.toValue=[NSNumbernumberWithFloat:20.f];
  28. anim2.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  29. anim2.repeatCount=CGFLOAT_MAX;
  30. anim2.autoreverses=YES;
  31. [ui_View.layeraddAnimation:anim2forKey:@"cornerRadius"];
  32. //contents
  33. CABasicAnimation*anim=[CABasicAnimationanimationWithKeyPath:@"contents"];
  34. anim.duration=1.f;
  35. anim.fromValue=(id)[UIImageimageNamed:@"1.jpg"].CGImage;
  36. anim.toValue=(id)[UIImageimageNamed:@"2.png"].CGImage;
  37. //anim.byValue=(id)[UIImageimageNamed:@"3.png"].CGImage;
  38. //anim.toValue=(id)[UIColorredColor].CGColor;
  39. //anim.fromValue=(id)[UIColorblackColor].CGColor;
  40. anim.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  41. anim.repeatCount=CGFLOAT_MAX;
  42. anim.autoreverses=YES;
  43. [ui_View.layeraddAnimation:animforKey:nil];
  44. [ui_View.layersetShadowOffset:CGSizeMake(2,2)];
  45. [ui_View.layersetShadowOpacity:1];
  46. [ui_View.layersetShadowColor:[UIColorgrayColor].CGColor];
  47. //
  48. CABasicAnimation*anim=[CABasicAnimationanimationWithKeyPath:@"shadowColor"];
  49. anim.duration=1.f;
  50. anim.toValue=(id)[UIColorredColor].CGColor;
  51. anim.fromValue=(id)[UIColorblackColor].CGColor;
  52. anim.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  53. anim.repeatCount=CGFLOAT_MAX;
  54. anim.autoreverses=YES;
  55. [ui_View.layeraddAnimation:animforKey:nil];
  56. CABasicAnimation*_anim=[CABasicAnimationanimationWithKeyPath:@"shadowOffset"];
  57. _anim.duration=1.f;
  58. _anim.fromValue=[NSValuevalueWithCGSize:CGSizeMake(0,0)];
  59. _anim.toValue=[NSValuevalueWithCGSize:CGSizeMake(3,3)];
  60. _anim.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  61. _anim.repeatCount=CGFLOAT_MAX;
  62. _anim.autoreverses=YES;
  63. [ui_View.layeraddAnimation:_animforKey:nil];
  64. CABasicAnimation*_anim1=[CABasicAnimationanimationWithKeyPath:@"shadowOpacity"];
  65. _anim1.duration=1.f;
  66. _anim1.fromValue=[NSNumbernumberWithFloat:0.5];
  67. _anim1.toValue=[NSNumbernumberWithFloat:1];
  68. _anim1.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  69. _anim1.repeatCount=CGFLOAT_MAX;
  70. _anim1.autoreverses=YES;
  71. [ui_View.layeraddAnimation:_anim1forKey:nil];
  72. CABasicAnimation*_anim2=[CABasicAnimationanimationWithKeyPath:@"shadowRadius"];
  73. _anim2.duration=1.f;
  74. _anim2.fromValue=[NSNumbernumberWithFloat:10];
  75. _anim2.toValue=[NSNumbernumberWithFloat:5];
  76. _anim2.timingFunction=[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  77. _anim2.repeatCount=CGFLOAT_MAX;
  78. _anim2.autoreverses=YES;
  79. [ui_View.layeraddAnimation:_anim2forKey:nil];</span>



CAScrollLayer对象的滚动区域的范围在它的子图层里面定义。


CAScrollLaye不提供键盘或鼠标事件处理,也不提供可见的滚动条。


CATextLayer可以方便的从字符串或字符串的内容创建一个图层类的内容


CATiledLayer允许递增的显示大而复杂的图片


CAEAGLLayer提供了一个OpenGLES渲染环境


CALayer的还扩展了NSKeyValueCoding的非正式协议,加入默认键值和额外的结构类型的自动对象包装(CGPoint,CGSize,CGRect,CGAffineTransform和CATransform3D)的支持,并提供许多这些结构的关键路径领域的访问

分享到:
评论

相关推荐

    iOS动画基础

    iOS动画的一些基本操作,并且配合图形操作,适合初学者。

    IOS 基本动画(旋转、移动、闪烁、缩放等)

    IOS 基本动画(旋转、移动、闪烁、缩放等)

    iOS动画--基础动画

    第三章 基础动画 学习iOS基础动画很好的中文教材

    A_GUIDE_TO_IOS_ANIMATION_2.0.pdf )中文高清彩板,Kitten的iOS 动画学习手册

    A_GUIDE_TO_IOS_ANIMATION_2.0.pdf )中文高清彩板,Kitten的iOS 动画学习手册2.0,从动画基础开始学习kitten动画

    iOS常用动画

    iOS开发中常用到的一些基础动画,如翻转、翻页、放缩等

    ios核心动画高级技巧中文版

    Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关...于是这个树形成了UIKit以及在iOS应用程序当中你所能在屏幕上看见的一切的基础。

    iOS核心动画---基础动画

    iOS开发高级 核心动画---基础动画,源代码解释详细,结构清晰明了。

    iOS核心动画高级技巧

    Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做CAlayer Kit这么一个不怎么和动画...于是这个树形成了UIKit以及在ios 应用程序当中你所能在屏幕上看见的一切的基础。

    ios-动画基础.zip

    动画基础,会对动画由简单到难进行 demo 说明。目前只有简单的基础 github:https://github.com/zhanghaifeng1234565/ProjectFunctionCollect

    ios基础动画

    凝聚了各种ios基础动画 组合动画的的代码

    android 仿IOS滑动删除动画

    基于[SwipeMenuListView]基础上,使用属性动画实现删除后ITEM的向上或者向下移动

    ios-基础动画.zip

    基础动画,适合初学者

    ios核心动画高级技巧

    ios核心动画高级技巧 Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么...于是这个树形成了UIKit以及在iOS应用程序当中你所能在屏幕上看见的一切的基础。

    iOS 核心动画编程

    阅读此文档的前 是你已经掌握了Objective-C语言的基础,因为核心动画内部广泛的使用了 Objective-C的相关属性。你还应该熟悉键-值编程方法(参考文档 Key-Value Coding Programming Guide)。同时如果你对Quartz2D...

    ios-仿树叶飘落CA动画.zip

    很逼真的一个树叶动画,因为不会传动图...希望见谅 ...仿照的一个树叶飘落动画,在原来的基础上添加了一些新的效果,并且添加了很多代码注释,希望刚接触CA的朋友们能快速上手并使用CA动画,享受带来的乐趣

    iOS 基础动画源码集锦

    作者CCBrother,源码CCAnimation,iOS源码 基础动画

    iOS核心动画高级技巧.pdf

    Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树...于是这个树形成了UIKit以及在iOS应用程序当中你所能在屏幕上看见的一切的基础

    iOS-Core-Animation-Advanced-Techniques.zip

    iOS 动画原理基础

    ios-最全动画教程-树形动画.zip

    Core Animation核心动画基础教程学习实例之实现简单的树形动画效果 ! 1、学习IOS动画不错的教程,附上github地址: https://github.com/AsTryE/Core-Animation-Demo01 2、IOS动画分类基础知识,github地址: ...

Global site tag (gtag.js) - Google Analytics