您的位置:首页 > 移动开发 > IOS开发

IOS中的基础动画CABasicAnimation的运用指南

2015-07-03 16:08 387 查看

1.前提信息

    CABasicAnimation类主要用于view的移动、旋转和缩放。通过对视图的layer进行控制达到效果,每个视图皆有layer,类似于安卓的画布。

    要使用CABasicAnimation类必须在项目里添加框架"QuartzCore.framework",并添加头文件<QuartzCore/QuartzCore.h>。

2.使用CABasicAnimation进行动画的大致流程

    大概有三个过程:①初始化CABasicAnimation对象并设置;

                                 ②配置动画对象的一些属性,如:duration,repeatcount等;

                                 ③目标视图的layer添加上该动画对象,并命个名

3.详解初始化CSBasicAnimation

    +(CABasicAnimation *)animationWithKeyPath:(NSString *)keyPath;//这是一个比较关键的静态初始化方法,决定动画类型

    参数keyPath包括这些值:

    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

4.详解CABasicAnimation的属性

    列出一些主要的几个属性:duration //持续时间,repeatCount //重复次数,autoreverse //反向再来一遍动画, fromValue //开始值, toValue //目标值

5.开始动画

    啥也不说,上个代码就懂了。

    [view.layer addAnimation:myAnimation forKey:@"随意都行"];

    然后动画就跑起来了。

6.单一的动画效果可能满足不了我们

    于是乎CAAnimationGroup就出现了。我们可以通过一个装着n个动画对象的array来填充它。

    +(CAAnimationGroup *)animation;//→_→都是用这个方法初始化动画组的,暂时不知为何

    然后为动画组对象的animations属性赋值(一个装着n个动画对象的array),再为动画组对象的各大属性赋值(→_→这些属性与上面提到的一样,但是要注意的是:加入array的动画对象千万不能设置duration和repeatcount,在动画组设置就好了!)

    另外,需要注意的是:动画在结束后会自动复位!!所以,为了阻止他们这样做,我们需要这样做:

    group.removedOnCompletion = NO;

    group.fillMode = kCAFillModeForwards;//这两个属性动画和动画组都拥有

7.可能你又希望在动画开始结束时做点什么

    没问题,协议方法帮你忙!不需要遵循神马协议,直接加入以下两个方法,然后自己随便用吧:

      - (void)animationDidStart:(CAAnimation *)animation{

         NSLog(@"begin");

      }

     - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{

         NSLog(@"end");

     } 

8.举个栗子

    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 40, 40)];

    view.backgroundColor = [UIColor brownColor];

    CGSize size = [[UIScreen mainScreen]bounds].size;

    view.center = CGPointMake(20, size.height/2);

    [self.view addSubview:view];

    

    //添加旋转动画

    CABasicAnimation *animation1 = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

    //animation1.duration = 10;

    //animation1.fromValue = [NSNumber numberWithFloat:0.0];

    animation1.toValue = [NSNumber numberWithFloat:36*M_PI];

    

    //x轴上得直接动画

    //CABasicAnimation *animation2 = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];

    //animation2.duration = 6;

    //animation2.fromValue = [NSNumber numberWithFloat:view.center.x];

    //animation2.toValue = [NSNumber numberWithFloat:size.width-40];//这里的x又不同了,指的是正常的左上角坐标

    //animation2.repeatCount = 3;

    //animation2.repeatDuration = 6;

    //animation2.autoreverses = YES;

    

    //移动向指定坐标

    CABasicAnimation *animation2 = [CABasicAnimation animationWithKeyPath:@"position"];

    animation2.toValue = [NSValue valueWithCGPoint:CGPointMake(size.width-20, size.height-20)];//指定的坐标为目标中心的坐标

    

    //动画组

    CAAnimationGroup *group = [CAAnimationGroup animation];

    group.animations = [NSArray arrayWithObjects:animation1, animation2, nil];

    group.duration = 3;

    group.delegate = self;

    group.removedOnCompletion = NO;

    group.fillMode = kCAFillModeForwards;

    //group.repeatCount = 99;

    [group setAutoreverses:YES];

    

    

    //开始动画

    [view.layer addAnimation:group forKey:@"xuanzhuantiaoyuewobutingxie"];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: