简述核心动画CoreAnimation

2016-07-15  本文已影响93人  captain_Lu

Core Animation简介

核心动画继承结构图

继承图.png

CAAnimation——简介

动画填充模式fillMode

(要想fillMode有效,最好设置removedOnCompletion = NO)

速度控制函数

速度控制函数(CAMediaTimingFunction)

动画代理方法
@interfaceNSObject(CAAnimationDelegate)
-(void)animationDidStart:(CAAnimation*)anim;
-(void)animationDidStop:(CAAnimation*)animfinished:(BOOL)flag;
CALayer上动画的暂停
-(void)pauseLayer:(CALayer*)layer
{
    CFTimeIntervalpausedTime= [layer convertTime:CACurrentMediaTime()fromLayer:nil];
    //让CALayer的时间停止走动
      layer.speed= 0.0;
    //让CALayer的时间停留在pausedTime这个时刻
    layer.timeOffset= pausedTime;
}
CALayer上动画的恢复
-(void)resumeLayer:(CALayer*)layer
{
    CFTimeIntervalpausedTime= layer.timeOffset;
    //1. 让CALayer的时间继续行走
      layer.speed= 1.0;
    //2. 取消上次记录的停留时刻
      layer.timeOffset= 0.0;
    //3. 取消上次设置的时间
      layer.beginTime= 0.0;    
    //4. 计算暂停的时间(这里也可以用CACurrentMediaTime()-pausedTime)
    CFTimeIntervaltimeSincePause= [layer convertTime:CACurrentMediaTime()fromLayer:nil]- pausedTime;
    //5. 设置相对于父坐标系的开始时间(往后退timeSincePause)
      layer.beginTime= timeSincePause;
}

基本动画CABasicAnimation

    CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"];
    basicAnimation.toValue = [NSValue valueWithCGRect:CGRectMake(280, 280, 20, 60)];
    basicAnimation.removedOnCompletion = NO;
    basicAnimation.fillMode = kCAFillModeForwards;
    basicAnimation.repeatCount = MAXFLOAT;
    basicAnimation.duration = 1;
    [self.redView.layer addAnimation:basicAnimation forKey:nil];

CAKeyframeAnimation帧动画

    //帧动画 (左右颤抖)
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
    animation.keyPath = @"transform.rotation";
    CGFloat angle1 = -5/180.0*M_PI;
    CGFloat angle2 = 5/180.0*M_PI;
    animation.values = @[@(angle1),@(angle2),@(angle1)];
    animation.repeatCount = MAXFLOAT;
    [self.redView.layer addAnimation:animation forKey:nil];

    //帧动画 (按照圆路径)
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
    animation.keyPath = @"position";
    animation.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 100, 100)].CGPath;
    animation.repeatCount = MAXFLOAT;
    animation.duration = 1;
    [self.redView.layer addAnimation:animation forKey:nil];

转场动画CATransition

    CATransition *anim = [CATransition animation];
    anim.type = @"cube";
    anim.duration = 1;
    [self.redView.layer addAnimation:anim forKey:nil];
转场动画效果.png

CAAnimationGroup动画组

    //动画组
    CAAnimationGroup *groupAnimation = [CAAnimationGroup animation];
    //缩放动画
    CABasicAnimation *scale = [CABasicAnimation animation];
    scale.keyPath = @"transform.scale";
    scale.toValue = @(.5);
    //旋转动画
    CABasicAnimation *rotation = [CABasicAnimation animation];
    rotation.keyPath = @"transform.rotation";
    rotation.toValue = @(M_PI/2);
    groupAnimation.animations = @[scale,rotation];
    [self.redView.layer addAnimation:groupAnimation forKey:nil];
上一篇 下一篇

猜你喜欢

热点阅读