嗷呜嗷呜嗷呜

 // 将视图作为属性方便后面执行多个不同动画
_myView = [[UIView alloc] init];
_myView.layer.position = CGPointMake(, );
_myView.layer.bounds = CGRectMake(, , , );
_myView.backgroundColor = [UIColor blueColor];
[self.view addSubview:_myView];
[_myView release];

平移动画(1)

 // 创建一个CABasicAnimation类型的动画对象并对CALayer的position属性执行动画
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"]; // 动画持续1.5s
anim.duration = 1.5; // position属性值从(50, 80)渐变到(300, 350)
anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(, )];
anim.toValue = [NSValue valueWithCGPoint:CGPointMake(, )]; // 设置动画的代理
anim.delegate = self; // 保持动画执行后的状态
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeForwards; // 添加动画对象到myView的图层上
[_myView.layer addAnimation:anim forKey:@"translate"];
  • 上面实现了平移动画
  • 想要实现不同的效果,最关键的地方就是第2行CABasicAnimation对象的初始化方法中keyPath的设定。必须是CALayer的某项属性。
  • 第8、9行这里的属性接收的是id类型的参数所以不能直接使用CGPoint这种结构体类型,而是要先包装成NSValue对象后再使用。
  • 注意:可以尝试将第9行的toValue换成byValue  区别:前者是到指定的位置,后者是在当前的位置上增加多少

  • 默认情况下,动画执行完毕后,动画会自动从CALayer上移除,CALayer又会回到原来的状态。为了保持动画执行后的状态,可以加入第15、16行代码

    fillMode的作用就是决定当前对象过了非active时间段的行为。比如动画开始之前,动画结束之后。如果是一个动画CAAnimation,则需要将其removedOnCompletion设置为NO,要不然fillMode不起作用.

    kCAFillModeRemoved 默认值 也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态 
    kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态 
    kCAFillModeBackwards 这个和kCAFillModeForwards是相对的,就是在动画开始前,你只要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始.你可以这样设定测试代码,将一个动画加入一个layer的时候延迟5秒执行.然后就会发现在动画没有开始的时候,只要动画被加入了layer,layer便处于动画初始状态 
    kCAFillModeBoth 理解了上面两个,这个就很好理解了,这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态.

  • 第19行后面的@"translate"只是给动画对象起了个名称,也可以直接给个nil,但是为方便以后可以调用CALayer的removeAnimationForKey:方法根据动画名称来移除相应的动画
  • 第12行后面的self是视图控制器。代理需要实现的方法:
 #pragma mark -----动画开始-----
- (void)animationDidStart:(CAAnimation *)anim {
NSLog(@"动画开始了");
} #pragma mark -----动画结束-----
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
// 查看一下动画执行完毕后的position值
NSString *string = NSStringFromCGPoint(_myView.layer.position);
NSLog(@"动画结束了,position:%@", string);
}

运行后发现, 在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。

 // 移除动画
[_myView.layer removeAnimationForKey:@"translate"]

平移动画(2)

 CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
anim.duration = ; CATransform3D form = CATransform3DMakeTranslation(, , );
anim.toValue = [NSValue valueWithCATransform3D:form]; [_myView.layer addAnimation:anim forKey:nil];
  • 通过CALayer的transform属性实现平移动画,layer会从自己的初始位置平移到(350, 350)位置
  • 通过transform(KVC)的方式来进行设置,可以简单实现3D效果的平移、缩放、旋转效果。
  • 可查看API文档搜索CABasicAnimation animationWithKeyPath Types

缩放动画(1)

 CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"bounds"];
anim.duration = ; anim.toValue = [NSValue valueWithCGRect:CGRectMake(, , , )]; [_myView.layer addAnimation:anim forKey:nil];

通过CALayer的bounds属性实现缩放动画,layer会从原来的尺寸(100x100)变为30x30

缩放动画(2)

 CABasicAnimation *anim = [CABasicAnimation
animationWithKeyPath:@"transform"];
anim.duration = 1.5; // 动画持续1.5s // CALayer的宽度从0.5倍变为2倍
// CALayer的高度从0.5倍变为1.5倍
anim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 0.5, )];
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(, 1.5, )]; [_myView.layer addAnimation:anim forKey:nil];

旋转动画

 CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
anim.duration = 1.5; // 绕着(1, 1, 0)这个向量轴顺时针旋转45°
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, , , )]; [_myView.layer addAnimation:anim forKey:nil];
  • 提示:如果要仅需要图形以2D的方式旋转,只要把CATransform3DMakeRotation在z方向上的值改为1即可。

    anima.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 1, 1, 0)];

  • 通过以上可以发现其实可以不用设置fromValue,只设置了toValue
  • CABasicAnimation虽然能够做很多基本的动画效果,但是有个局限性,只能让CALayer的属性从某个值渐变到另一个值,仅仅是在2个值之间渐变

之一:CABasicAnimation - 基本动画的更多相关文章

  1. 核心动画基础动画(CABasicAnimation)关键帧动画

    1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATran ...

  2. IOS第18天(5,CABasicAnimation基本动画)

    ******* #import "HMViewController.h" @interface HMViewController () @property (nonatomic, ...

  3. Swift - 使用CABasicAnimation实现动画效果

    1,CABasicAnimation类只有三个属性: fromValue:开始值 toValue:结束值 Duration:动画的时间 2,通过animationWithKeyPath键值对的方式设置 ...

  4. CABasicAnimation 基本动画

    几个可以用来实现热门APP应用PATH中menu效果的几个方法 +(CABasicAnimation *)opacityForever_Animation:(float)time //永久闪烁的动画 ...

  5. CABasicAnimation 基本动画 分类: ios技术 2015-07-16 17:10 132人阅读 评论(0) 收藏

    几个可以用来实现热门APP应用PATH中menu效果的几个方法 +(CABasicAnimation *)opacityForever_Animation:(float)time //永久闪烁的动画 ...

  6. Core Animation之CABasicAnimation(基础动画)

    #import "ViewController.h" @interface ViewController () @property(nonatomic,strong)UIButto ...

  7. CABasicAnimation 划线动画

    CGFloat animateDuration = ; UIBezierPath *bezierPath = [[UIBezierPath alloc] init]; CGPoint centerFr ...

  8. CABasicAnimation添加动画离开屏幕就动画停止的问题

    解决方法: animation.removedOnCompletion = NO;

  9. iOS开发CABasicAnimation动画理解

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

随机推荐

  1. 给 Web 前端开发人员推荐20款 CSS 编辑器

    CSS 和 HTML,JavaScript 是网页的基础,作为前端开发人员,对这三者都要很熟悉.特别是未来流行全栈开发的时代,每项技术都是你知识结构中必要的一个节点. 在开发中,选择好工具是非常重要的 ...

  2. NASA的下一个十年(译)

    原文 MICHAEL ROSTON (New York Times) 从左起:木卫二:土卫六:经过火星的水手谷星的合成图:金星的拼接图 大多数人已经从人类第一次近距离看到冥王星的兴奋中冷静下来.下一个 ...

  3. 【大数据】Summingbird(Storm + Hadoop)的demo运行

    一.前言 为了运行summingbird demo,笔者走了很多的弯路,并且在国内基本上是查阅不到任何的资料,耗时很久才搞定了demo的运行.真的是一把辛酸泪,有兴趣想要研究summingbird的园 ...

  4. ASP.NET MVC WEB API必知必会知识点总结

    一.理解WEB API:提供基于RESTful架构的WEB服务,通过HTTP请求方法(GET, PUT, POST, DELETE)映射到服务器端相应的ACTION方法(CRUD). RESTful架 ...

  5. zTree的使用2

    前台代码: @using Models; @{ Layout = "~/Views/Shared/_Layout.cshtml"; } <link type="te ...

  6. Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

  7. 58同城高性能移动Push推送平台架构演进之路

    本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...

  8. 【iOS】Object-C注释

    与其他语言一样,Object-C的注释也分为两种,一种是普通注释,一种是文档注释,普通注释通常给阅读代码的人看,而文档注释可以被appledoc识别,在使用的时候xcode能给出智能提示 简单注释 1 ...

  9. 奔跑的歌颂 diskgenius 找回了20G数据

    2.0同学家的电脑不慎重装系统,结果默认重新分区.其他倒没什么数据,就是几千张记录孩子成长的照片最为珍贵.为了找回数据,用U盘启动,使用Diskgenius全部找回,在此奔歌一下.

  10. Python 常用string函数

    Python 常用string函数 字符串中字符大小写的变换 1. str.lower()   //小写>>> 'SkatE'.lower()'skate' 2. str.upper ...