代码如下:
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *redView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//[self transformOneByOne];
[self transformBycircle];
}
-(void)transformOneByOne{
CAKeyframeAnimation *kfAnimation = [CAKeyframeAnimation animation];
kfAnimation.keyPath = @"position";
//指定几个帧让该让layer去走
NSValue *v1 = ([NSValue valueWithCGPoint:CGPointMake(0, 100)]);
NSValue *v2 = ([NSValue valueWithCGPoint:CGPointMake(200, 50)]);
NSValue *v3 = ([NSValue valueWithCGPoint:CGPointMake(30, 100)]);
NSValue *v4 = ([NSValue valueWithCGPoint:CGPointMake(300, 300)]);
//数组里面不能放结构体 所以要放的话 要包装一下类型再放
kfAnimation.values = @[v1, v2, v3 , v4];
//自己调整每个帧的时间
//kfAnimation.keyTimes = @[@(0.5), @(0.25), @(0.25)];
kfAnimation.duration = 2.0;
[self.redView.layer addAnimation:kfAnimation forKey:nil];
kfAnimation.removedOnCompletion = NO;
kfAnimation.fillMode = kCAFillModeForwards;
}
-(void)transformBycircle{
CAKeyframeAnimation *kfAnimation = [CAKeyframeAnimation animation];
kfAnimation.keyPath = @"position";
//设置动画执行节奏
kfAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];//速度的控制
kfAnimation.duration = 2.0;
//指定一个路径
CGMutablePathRef path = CGPathCreateMutable();
//根据路径创造一个圆
CGPathAddEllipseInRect(path, nil, CGRectMake(100, 100, 100, 100));
kfAnimation.path = path;
//只有给这个动画对象设置代理,才能调用动画的代理方法
kfAnimation.delegate = self;
[self.redView.layer addAnimation:kfAnimation forKey:nil];
kfAnimation.removedOnCompletion = NO;
kfAnimation.fillMode = kCAFillModeForwards;
CGPathRelease(path);
}
/**
*动画开始的代理方法
*
****/
-(void)animationDidStart:(CAAnimation *)anim{
NSLog(@"开始动画");
}
/**
*动画结束的代理方法
*
****/
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
NSLog(@"结束动画");
}
@end