iOS CoreAnimation( 核心动画 )

CABasicAnimation  基础动画

#define  radin(angle)   (M_PI*(angle)/180) //定义自己需要的弧度
@interface ViewController () @property(nonatomic,strong)CALayer *layer; @property (strong, nonatomic) IBOutlet UIView *readView; @property (strong, nonatomic) IBOutlet UIImageView *iconView; - (IBAction)begin:(id)sender; - (IBAction)stop:(id)sender;

 

//创建CALayer

 CALayer *layer =[CALayer layer];
    layer.position=CGPointMake(100, 100);
    layer.bounds=CGRectMake(0, 0, 100, 100);
    layer.backgroundColor =[UIColor redColor].CGColor;
  
    
    [self.view.layer addSublayer:layer];
    self.layer=layer;

 CABasicAnimation  

//旋转

 //1.创建动画对象
    CABasicAnimation *anim =[CABasicAnimation animation];
    
    //2.设置动画对象
    //keyPath决定了执行怎样的动画,调整那个属性来执行动画
    anim.keyPath=@"transform";
    
    //
    anim.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 1, -1, 0)];
    //动画执行的时间
    anim.duration=2.0;
    
    /**让图层保持动画执行完毕后的状态**/
    //动画执行完毕后不要删除动画
    anim.removedOnCompletion=NO;
    //保持最新的状态
    anim.fillMode= kCAFillModeForwards;
    
    //3.添加动画
    [self.layer addAnimation:anim forKey:nil];

 缩放

//1.创建动画对象
    CABasicAnimation *anim =[CABasicAnimation animation];
    
    //2.设置动画对象
    //keyPath决定了执行怎样的动画,调整那个属性来执行动画
    anim.keyPath=@"bounds";
    
    anim.toValue=[NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
    //动画执行的时间
    anim.duration=2.0;
    
    /**让图层保持动画执行完毕后的状态**/
    //动画执行完毕后不要删除动画
    anim.removedOnCompletion=NO;
    //保持最新的状态
    anim.fillMode= kCAFillModeForwards;
    
    //3.添加动画
    [self.layer addAnimation:anim forKey:nil];

 //平移

 
    //1.创建动画对象
    CABasicAnimation *anim =[CABasicAnimation animation];
    
    //2.设置动画对象
    //keyPath决定了执行怎样的动画,调整那个属性来执行动画
    anim.keyPath=@"position";
    
    anim.fromValue=[NSValue valueWithCGPoint:CGPointMake(0, 0)];
    anim.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 300)];
    //动画执行的时间
    anim.duration=2.0;
    
    /**让图层保持动画执行完毕后的状态**/
    //动画执行完毕后不要删除动画
    anim.removedOnCompletion=NO;
    //保持最新的状态
    anim.fillMode= kCAFillModeForwards;
    
    //3.添加动画
    [self.layer addAnimation:anim forKey:nil];

 CAKeyframeAnimation :关键帧动画

//平移

 //第一种方式
    CAKeyframeAnimation * anim=[CAKeyframeAnimation animation];
    
    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(300, 200)];
    
    anim.values=@[v1,v2,v3,v4];
    anim.duration=2.0;
    
    anim.removedOnCompletion=NO;
    
    anim.fillMode=kCAFillModeForwards;
    
    
    [self.readView.layer addAnimation:anim forKey:nil];
    
    //第二种方式
    CAKeyframeAnimation * anim1=[CAKeyframeAnimation animation];
    
    anim1.keyPath =@"position";
    anim1.duration=2.0;
    
    anim1.removedOnCompletion=NO;
    
    anim1.fillMode=kCAFillModeForwards;
    
    //创建路径
    CGMutablePathRef path=CGPathCreateMutable();
    
    //给路径添加一个圆
    CGPathAddEllipseInRect(path, NULL, CGRectMake(100, 100, 200, 200));
    anim.path= path;
    //释放
    CGPathRelease(path);
    
    //设置动画的执行节奏 (匀速,先快后慢等)
    //kCAMediaTimingFunctionEaseOut :一开始比较慢,中间会加速,临近结束的时候会变慢
    anim.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    
    
    //监听动画 后面会有两个代理方法
    anim.delegate=self;
    
    
    [self.readView.layer addAnimation:anim1 forKey:nil];
#pragma mark-动画代理方法
#pragma mark 动画开始的时候调用
-(void)animationDidStart:(CAAnimation *)anim{
    
    
}

#pragma mark 动画结束的时候调用
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
    
    
}

 

//抖动

//开始抖动
- (IBAction)begin:(id)sender {
    
    //创建
    CAKeyframeAnimation *anim =[CAKeyframeAnimation animation];
    
    anim.keyPath =@"transform.rotation";
    
    anim.values=@[@(-radin(4)),@(radin(4)),@(-radin(4))];
    anim.duration=0.15;
    
    
    //重复次数
    anim.repeatCount=MAXFLOAT;
    
    anim.removedOnCompletion=NO;
    anim.fillMode =kCAFillModeForwards;
    [self.iconView.layer addAnimation:anim forKey:@"shake"];
    
    
}

//停止抖动
- (IBAction)stop:(id)sender {
    
    [self.iconView.layer removeAnimationForKey:@"shake"];
    
    
    
}

 

posted @ 2015-09-09 17:45  斌哥骑猿看唱本  阅读(258)  评论(0编辑  收藏  举报