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"];
}
原文:http://www.cnblogs.com/wangbinbin/p/4795505.html