#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