核心动画

Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统

Quartz 2D能完成的工作

绘制图形 : 线条\三角形\矩形\圆\弧等

绘制文字

绘制\生成图片(图像)

读取\生成PDF

截图\裁剪图片

自定义UI控件

… …

1、CABasicAnimation(基本动画)
 
1.1->创建动画对象

CABasicAnimation *anim = [CABasicAnimation animation];

1.2->设置动画对象

keyPath决定了执行怎样的动画, 调整哪个属性来执行动画

anim.keyPath = @"transform.rotation";

anim.keyPath = @“bounds";

anim.keyPath = @“transform";

anim.keyPath = @“transform.translation.x”;

//起始状态,如果不设置则默认从图层所在位置开始动画

anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];

 

//结束状态

anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];

byValue : 增加多少值  toValue:最终变成值的多少

//动画时长

anim.duration = 2.0;

//重复次数

anim.repeatCount = MAXFLOAT;

1.3 ->让图层保持动画执行完毕后的状态

// 动画执行完毕后不要删除动画

anim.removedOnCompletion = NO;

// 保持最新的状态

anim.fillMode = kCAFillModeForwards;

1.4 ->添加动画到图层

[self.layer addAnimation:anim forKey:nil];(后面的这个key值是可以指定某一个动画的)

 

2、CAKeyframeAnimation(关键帧动画)

2.1->创建动画对象

CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];

2.2->设置动画对象

keyPath决定了执行怎样的动画, 调整哪个属性来执行动画

anim.keyPath = @"transform.rotation";

anim.keyPath = @“bounds";

anim.keyPath = @“transform";

anim.keyPath = @“transform.translation.x”;

//动画时长

anim.duration = 2.0;

//重复次数

anim.repeatCount = MAXFLOAT;

// 设置动画的执行节奏

anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

//设置动画的执行路径(也可以设置关键帧数组)

CGMutablePathRef path = CGPathCreateMutable();

CGPathAddEllipseInRect(path, NULL, CGRectMake(100, 100, 200, 200));

 anim.path = path;

//注意:C语言中如果使用了create方法创建的,都要释放,不然会有内存泄漏

 CGPathRelease(path);

//设置关键帧数组(也可以设置动画的执行路径)

 anim.keyPath = @"position";

 NSValue *v1 = [NSValue valueWithCGPoint:CGPointZero];

  NSValue *v2 = [NSValue valueWithCGPoint:CGPointMake(100, 0)];

  NSValue *v3 = [NSValue valueWithCGPoint:CGPointMake(100, 200)];

  NSValue *v4 = [NSValue valueWithCGPoint:CGPointMake(0, 200)];

  anim.values = @[v1, v2, v3, v4];

 

2.3 ->让图层保持动画执行完毕后的状态

// 动画执行完毕后不要删除动画

anim.removedOnCompletion = NO;

// 保持最新的状态

anim.fillMode = kCAFillModeForwards;

2.4 ->添加动画到图层

[self.layer addAnimation:anim forKey:nil];(后面的这个key值是可以指定某一个动画的)

2.5 ->移除动画(如果要移除一个动画,那么这个动画一定要设置Key值)

[self.iconView.layer removeAnimationForKey:@“shake"];

3、CATransition(转场动画)


3.1->创建动画对象

CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];

3.2->设置动画对象

anim.type = @“pageUnCurl";

anim.subtype = kCATransitionFromLeft;

 

anim.startProgress = 0.0;

anim.endProgress = 0.5;

3.3 ->添加动画到图层

[self.layer addAnimation:anim forKey:nil];

4、CAAnimationGroup(动画组)
 
   // 4.1.创建旋转动画对象

    CABasicAnimation *rotate = [CABasicAnimation animation];

    rotate.keyPath = @"transform.rotation";

    rotate.toValue = @(M_PI);    

   // 4.2.创建缩放动画对象

    CABasicAnimation *scale = [CABasicAnimation animation];

    scale.keyPath = @"transform.scale";

    scale.toValue = @(0.0);

    // 4.3.平移动画

    CABasicAnimation *move = [CABasicAnimation animation];

    move.keyPath = @"transform.translation";

    move.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];

    // 4.4.将所有的动画添加到动画组中

    CAAnimationGroup *group = [CAAnimationGroup animation];

    group.animations = @[rotate, scale, move];

    group.duration = 2.0;

    group.removedOnCompletion = NO;

    group.fillMode = kCAFillModeForwards;

    // 4.5.把动画组添加到图层中

    [self.myvie.layer addAnimation:group forKey:nil];

5、其它动画

1 -> //好像只适用在iPad上,也是类似于转场动画(?)
[UIView transitionWithView:self.view duration:1.0 options:UIViewAnimationOptionTransitionCurlUp animations:nil completion:nil];
2->[UIView beginAnimations:nil context:nil];

self.myview.center = CGPointMake(200, 300);

 [UIView commitAnimations];

3 -> [UIView animateWithDuration:1.0 animations:^{

        self.myview.center = CGPointMake(200, 300);

    } completion:^(BOOL finished) {

 }];

 
posted @ 2014-08-26 22:43  树籽  阅读(182)  评论(0编辑  收藏  举报