/*
CAKeyframeAnimation 也属于 CAPropertyAnimation
关键帧动画 可以让我们精准的控制动画效果 它的原理是 把动画序列里面比较关键的帧取出来 设置他的动画效果
values属性 执行动画轨迹的路径
path 属性 执行动画轨迹的数组
*/
#import "ViewController.h"
@interface ViewController ()
{
CALayer *petalLayer;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
NSString *path = [[NSBundle mainBundle] pathForResource:@"落叶" ofType:@"jpg"];
imageView.image = [UIImage imageWithContentsOfFile:path];
[self.view addSubview:imageView];
[self addPetal];
}
- (void)addPetal {
NSString *path = [[NSBundle mainBundle] pathForResource:@"petal" ofType:@"jpg"];
UIImage *petal = [UIImage imageWithContentsOfFile:path];
petalLayer = [[CALayer alloc] init];
petalLayer.bounds = CGRectMake(0, 0, petal.size.width, petal.size.height);
petalLayer.position = CGPointMake(150, 250);
petalLayer.contents = (id)petal.CGImage;
[self.view.layer addSublayer:petalLayer];
}
- (void)dropAnimation {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [NSValue valueWithCGPoint:petalLayer.position];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(150, 600)];
animation.duration = 5;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeBoth;
[petalLayer addAnimation:animation forKey:@"show"];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self dropAnimation];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end