#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)UIButton *btn;
@property(nonatomic,strong)CALayer *calayer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.btn=[UIButton buttonWithType:UIButtonTypeSystem];
self.btn.frame=CGRectMake(100, 100, 100, 100);
self.btn.backgroundColor=[UIColor redColor];
[self.btn setTitle:@"按钮" forState:UIControlStateNormal];
[self.btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.btn];
}
-(void)btnClick:(id)sender
{
//基础动画两种实例化方式
// CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@"transform"];
CABasicAnimation *basicAnimation=[CABasicAnimation animation];
//基础动画主要有三个属性 fromValue, toValue, byValue
//toValue到多少 byValue增加多少
basicAnimation.keyPath=@"position";
//这几个属性都是id类型,由于CGPoint是结构体类型,不能直接用,所以要转换一下下
// basicAnimation.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, 100, 1)];
//图层transform属性是CATransform3D类型 不能用仿射变换 仿射变换是图层中的方法所以不能通过CABasicAnimation动画改变
// basicAnimation.toValue=[NSValue valueWithCGAffineTransform:CGAffineTransformMakeScale(2.0, 2.0)];
//位置变换
basicAnimation.fromValue=[NSValue valueWithCGPoint:CGPointMake(0, 0)];
basicAnimation.toValue=[NSValue valueWithCGPoint:CGPointMake(300, 300)];
//动画是添加到图层上的,动画结束后是否移除该动画 如果YES,fillMode属性基本没意义
basicAnimation.removedOnCompletion=NO;
//设置动画的状态
//kCAFillModeForwards:动画延迟结束开始执行动画时从fromValue到toValue最终停留在toValue
//kCAFillModeBackwards:动画在fromValue后开始延迟,延迟结束执行动画,从fromValue到toValue,最终到初始值状态
//kCAFillModeBoth:动画在fromValue后开始延迟,延迟结束执行动画,从fromValue到toValue,最终到toValue
//kCAFillModeRemoved:动画延迟结束开始执行动画时从fromValue到toValue最终停留在初始值状态
basicAnimation.fillMode=kCAFillModeRemoved;
//动画共有的一些属性
basicAnimation.duration=5.0;
// 延迟5秒执行
basicAnimation.beginTime=CACurrentMediaTime()+5;
//设置动画的代理
basicAnimation.delegate=self;
//在图层中增加动画
[self.btn.layer addAnimation:basicAnimation forKey:nil];
}
//CAAnimation动画代理方法 这两个代理方法是在CAAnimation中的代理,所以其他的动画也可以使用
- (void)animationDidStart:(CAAnimation *)anim
{
NSLog(@"动画开始");
}
//CAAnimation动画代理方法结束动画
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
NSLog(@"动画结束");
NSLog(@"%f",self.btn.frame.origin.x);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end