核心动画01-CABasicAnimation
- (void)viewDidLoad {//创建layer对象 [super viewDidLoad]; 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,基本动画,只能从fromValue改变到toValue,只能在两个值之间切换
一: 平移动画
- (void)testTranslate { /**平移方法一:position**/ //1、创建动画对象 CABasicAnimation *anim = [CABasicAnimation animation]; //2、设置动画对象 //让图层动起来的本质是改变图层的某些属性 //keyPath决定了执行怎样的动画,通过KVC的方式来执行动画的,keyPath告诉它调整哪个属性来执行动画,这个属性不可以乱写,要图层有这个属性才可以 anim.keyPath = @"position"; // anim.fromValue = //没有设置的话,默认从当前位置开始 //toValue:最终变成什么值 //byValue:增加多少值 anim.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)]; // anim.byValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)]; anim.duration = 2.0; //核心动画有一个缺点:会反弹,回到动画开始的初始位置 /**让图层保存动画执行完毕后的状态**/ //开发中直接拷贝,不需要记 //两个属性可以取消核心动画的反弹效果 //属性1:动画执行完毕之后不要删除动画 anim.removedOnCompletion = NO; //当完成动画的时候,是否移除动画,默认是YES,表示移除 //属性2:保存最新的状态 anim.fillMode = kCAFillModeForwards; //以kCAFillMode开头,动画执行完的保存模式,Forwards表示前进,保持动画最新的状态 //3、添加动画 [self.layer addAnimation:anim forKey:nil]; /**平移方法二:anchorPoint,改变锚点**/ // anim.keyPath = @"anchorPoint"; // anim.toValue = [NSValue valueWithCGPoint:CGPointMake(1, 1)]; /**平移方法三:**/ // anim.keyPath = @"transform.translation"; // anim.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)]; }
二:缩放
#pragma make 缩放 - (void)testScale { //1、创建动画对象 CABasicAnimation *anim = [CABasicAnimation animation]; //2、设置动画对象 //keyPath决定了执行怎样的动画 anim.keyPath = @"bounds"; // anim.fromValue = //没有设置的话,默认从当前位置开始 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]; }
三、TransForm三维旋转
- (void)testRotation3D { //1、创建动画对象 CABasicAnimation *anim = [CABasicAnimation animation]; //2、设置动画对象 //keyPath决定了执行怎样的动画 anim.keyPath = @"transform"; // anim.fromValue = //没有设置的话,默认从当前位置开始 anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 0)];//包装什么类型可以敲一下layer的这个属性是什么类型的 anim.duration = 2.0; /**让图层保存动画执行完毕后的状态**/ anim.removedOnCompletion = NO; anim.fillMode = kCAFillModeForwards; //3、添加动画 [self.layer addAnimation:anim forKey:nil]; }
四、TransForm二维旋转
- (void)testRotation2D { //1、创建动画对象 CABasicAnimation *anim = [CABasicAnimation animation]; //2、设置动画对象 //keyPath决定了执行怎样的动画 anim.keyPath = @"transform.rotation"; // anim.fromValue = //没有设置的话,默认从当前位置开始 //查一下官方文档就知道传人什么值了,输入CATransform keyPath就可以了 anim.toValue = @(M_PI);//包装什么类型可以敲一下layer的这个属性是什么类型的 // //transform属性缩放,可以查文档看transform后面的属性 // anim.keyPath = @"transform.scale"; // anim.toValue = @(1.5);//不指定宽高的话表示,宽高一起缩放1.5倍 anim.duration = 2.0; /**让图层保存动画执行完毕后的状态**/ anim.removedOnCompletion = NO; anim.fillMode = kCAFillModeForwards; //3、添加动画 [self.layer addAnimation:anim forKey:nil]; }