`
janedoneway
  • 浏览: 572400 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ios 动画基础

 
阅读更多

From: http://blog.csdn.net/diqun1314/article/details/7639121

 

 

       所有核心动画的动画类都是从 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. CGFloat DegreesToRadians(CGFloat degrees) {returndegrees * M_PI / 180;};  

  2. CGFloat RadiansToDegrees(CGFloat radians) {returnradians * 180 / M_PI;};


 

        你必须通过 setValue:forKeyPath:或者valueForKeyPath:方法,具体如下:


  1.  myLayer.transform.rotation.x=0;  
  2.   
  3. [myLayer setValue:[NSNumber numberWithInt:0]forKeyPath:@"transform.rotation.x"];



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


给CALayer提供内容

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

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

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


创建一个委托类实

        displayLayer:或 drawLayer:inContext:


  1. - (void)displayLayer:(CALayer *)theLayer  
  2.   
  3. {  
  4.   
  5.     // check the value of the layer's state key  
  6.   
  7.     if ([[theLayer valueForKey:@"state"] boolValue])  
  8.   
  9.     {  
  10.   
  11.         // display the yes image  
  12.   
  13.         theLayer.contents=[someHelperObjectloadStateYesImage];  
  14.   
  15.     }  
  16.   
  17.     else {  
  18.   
  19.         // display the no image  
  20.   
  21.         theLayer.contents=[someHelperObjectloadStateNoImage];  
  22.   
  23.     }  
  24.   




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


        实例重新缓存其内容,可以通过发送以下任何一个方法setNeedsDisplay或setNeedsDisplayInRect:的消息,亦或者设置图层的needsDisplaOnBoundsChange属性为 YES


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


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


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


  1. CABasicAnimation *_basicAnimation= [CABasicAnimation animationWithKeyPath:@"opacity"];  
  2.   
  3.    _basicAnimation.duration=3.0;  
  4.   
  5.    _basicAnimation.repeatCount=2;  
  6.   
  7.    _basicAnimation.autoreverses=YES;  
  8.   
  9.    _basicAnimation.fromValue=[NSNumber numberWithFloat:1.0];  
  10.   
  11.    _basicAnimation.toValue=[NSNumber numberWithFloat:0.0];  
  12.   
  13.     [self.m_imageViewBg.layer addAnimation:_basicAnimation forKey:@"animateOpacity"]; 




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

        animationWithKeyPath的值:

        transform.scale= 比例轉換

        transform.scale.x =闊的比例轉換

        transform.scale.y =高的比例轉換

        transform.rotation.z =平面圖的旋轉

        opacity = 透明度

        margin

        zPosition

        backgroundColor

        cornerRadius

        borderWidth

        bounds

        contents

        contentsRect

     

        frame

        hidden

        mask

        masksToBounds

       

        position

        shadowColor

        shadowOffset

        shadowOpacity

        shadowRadius


[cpp] view plaincopy
 
  1.    [self. ui_View.layer removeAllAnimations];  
  2.  
  3.    CABasicAnimation *pulse= [CABasicAnimation animationWithKeyPath:@"transform.scale"];  
  4.   
  5.    pulse.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];  
  6.   
  7.    pulse.duration = 0.5 + (rand() % 10) * 0.05;  
  8.   
  9.    pulse.repeatCount = 1;  
  10.   
  11.    pulse.autoreverses = YES;  
  12.   
  13.    pulse.fromValue =[NSNumber numberWithFloat:.8];  
  14.   
  15.    pulse.toValue =[NSNumber numberWithFloat:1.2];  
  16.   
  17.    [self.ui_View.layer addAnimation:pulseforKey:nil];  
  18.   
  19. // bounds  
  20.   
  21.    
  22.   
  23. CABasicAnimation *anim = [CABasicAnimationanimationWithKeyPath:@"bounds"];  
  24.   
  25.    anim.duration = 1.f;  
  26.   
  27.    anim.fromValue =[NSValue valueWithCGRect:CGRectMake(0,0,10,10)];  
  28.   
  29.    anim.toValue =[NSValue valueWithCGRect:CGRectMake(10,10,200,200)];  
  30.   
  31.    anim.byValue  = [NSValue valueWithCGRect:self. ui_View.bounds];   
  32.   
  33. //    anim.toValue= (id)[UIColor redColor].CGColor;  
  34.   
  35. //   anim.fromValue =  (id)[UIColorblackColor].CGColor;  
  36.   
  37.      
  38.   
  39.    anim.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  40.   
  41.    anim.repeatCount = 1;  
  42.    anim.autoreverses = YES;  
  43.   
  44.    [ui_View.layeraddAnimation:anim forKey:nil];  
  45.   
  46. //cornerRadius  
  47.   
  48.    
  49.   
  50.    CABasicAnimation*anim2 = [CABasicAnimationanimationWithKeyPath:@"cornerRadius"];  
  51.    anim2.duration = 1.f;  
  52.    anim2.fromValue =[NSNumber numberWithFloat:0.f];  
  53.    anim2.toValue =[NSNumber numberWithFloat:20.f];  
  54.    anim2.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  55.    anim2.repeatCount = CGFLOAT_MAX;  
  56.    anim2.autoreverses = YES;  
  57.    [ui_View.layeraddAnimation:anim2 forKey:@"cornerRadius"];  
  58.   
  59. //contents  
  60.   
  61. CABasicAnimation *anim = [CABasicAnimationanimationWithKeyPath:@"contents"];  
  62.    anim.duration = 1.f;  
  63.    anim.fromValue =(id)[UIImageimageNamed:@"1.jpg"].CGImage;  
  64.    anim.toValue =(id)[UIImageimageNamed:@"2.png"].CGImage;  
  65. //   anim.byValue  = (id)[UIImageimageNamed:@"3.png"].CGImage;  
  66.   
  67. //    anim.toValue= (id)[UIColor redColor].CGColor;  
  68.   
  69. //   anim.fromValue =  (id)[UIColorblackColor].CGColor;  
  70.   
  71.    anim.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  72.    anim.repeatCount = CGFLOAT_MAX;  
  73.    anim.autoreverses = YES;  
  74.    [ui_View.layeraddAnimation:anim forKey:nil];  
  75.   
  76.    
  77.   
  78. [ui_View.layer setShadowOffset:CGSizeMake(2,2)];  
  79.   
  80.    [ui_View.layer setShadowOpacity:1];  
  81.   
  82.    [ui_View.layer setShadowColor:[UIColorgrayColor].CGColor];  
  83.   
  84. //      
  85.   
  86.    CABasicAnimation *anim =[CABasicAnimation animationWithKeyPath:@"shadowColor"];  
  87.   
  88.    anim.duration = 1.f;  
  89.   
  90.    anim.toValue =(id)[UIColorredColor].CGColor;  
  91.   
  92.    anim.fromValue =  (id)[UIColorblackColor].CGColor;  
  93.   
  94.    anim.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  95.   
  96.    anim.repeatCount = CGFLOAT_MAX;  
  97.   
  98.    anim.autoreverses = YES;  
  99.    [ui_View.layer addAnimation:anim forKey:nil];  
  100.   
  101.      
  102.   
  103.    CABasicAnimation *_anim= [CABasicAnimation animationWithKeyPath:@"shadowOffset"];  
  104.   
  105.    _anim.duration = 1.f;  
  106.   
  107.    _anim.fromValue =[NSValue valueWithCGSize:CGSizeMake(0,0)];  
  108.   
  109.    _anim.toValue =[NSValue valueWithCGSize:CGSizeMake(3,3)];  
  110.   
  111.    _anim.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  112.   
  113.    _anim.repeatCount = CGFLOAT_MAX;  
  114.   
  115.    _anim.autoreverses = YES;  
  116.   
  117.    [ui_View.layer addAnimation:_anim forKey:nil];  
  118.   
  119.      
  120.   
  121.      
  122.   
  123.    CABasicAnimation *_anim1= [CABasicAnimation animationWithKeyPath:@"shadowOpacity"];  
  124.   
  125.    _anim1.duration = 1.f;  
  126.   
  127.    _anim1.fromValue =[NSNumber numberWithFloat:0.5];  
  128.   
  129.    _anim1.toValue =[NSNumber numberWithFloat:1];  
  130.   
  131.    _anim1.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  132.   
  133.    _anim1.repeatCount = CGFLOAT_MAX;  
  134.   
  135.    _anim1.autoreverses = YES;  

  136.    [ui_View.layer addAnimation:_anim1 forKey:nil];  
  137.   

  138.   
  139.    CABasicAnimation *_anim2= [CABasicAnimation animationWithKeyPath:@"shadowRadius"];  
  140.   
  141.    _anim2.duration = 1.f;  
  142.   
  143.    _anim2.fromValue =[NSNumber numberWithFloat:10];  
  144.   
  145.    _anim2.toValue =[NSNumber numberWithFloat:5];  
  146.   
  147.      
  148.   
  149.    _anim2.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  150.   
  151.    _anim2.repeatCount = CGFLOAT_MAX;  
  152.   
  153.    _anim2.autoreverses = YES;  
  154.   
  155.      
  156.   
  157.    [ui_View.layeraddAnimation:_anim2 forKey:nil];

 

 

 

        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