3D,顾名思义就是可以在z轴上动作,这里列举三个用例
//用例1 scale
CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"
transform"];
CATransform3D transform =
CATransform3DMakeScale(0.5, 0.5, 1.0);
//x,y,z放大缩小倍数
NSValue *value = [NSValue valueWithCATransform3D:transform];
[theAnimation setToValue:value];
transform = CATransform3DMakeScale(1.0, 1.0, 1.0);
value = [NSValue valueWithCATransform3D:transform];
[theAnimation setFromValue:value];
[theAnimation setAutoreverses:YES];
//原路返回的动画一遍
[theAnimation setDuration:1.0];
[theAnimation setRepeatCount:2];
[layer addAnimation:theAnimation forKey:nil];
//用例2 rotate
......
CATransform3D transform =
CATransform3DMakeRotation(1.57, 1, 1, 0);
//1.57表示所转角度的弧度 = 90Pi/180 = 90*3.14/180
NSValue *value = [NSValue valueWithCATransform3D:transform];
[theAnimation setToValue:value];
transform = CATransform3DMakeRotation(0, 1, 1, 0);
value = [NSValue valueWithCATransform3D:transform];
[theAnimation setFromValue:value];
......
//用例3 scale+rotate+position
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"
transform"];
CATransform3D rotateTransform = CATransform3DMakeRotation(1.57, 0, 0, -1);
CATransform3D scaleTransform = CATransform3DMakeScale(5, 5, 5);
CATransform3D positionTransform =
CATransform3DMakeTranslation(0, 0, 0);
//位置移动
CATransform3D combinedTransform =
CATransform3DConcat(rotateTransform, scaleTransform);
//Concat就是combine的意思
combinedTransform = CATransform3DConcat(combinedTransform, positionTransform);
//再combine一次把三个动作连起来
[anim setFromValue:[NSValue valueWithCATransform3D:
CATransform3DIdentity]];
//放在3D坐标系中最正的位置
[anim setToValue:[NSValue valueWithCATransform3D:combinedTransform]];
[anim setDuration:5.0f];
[
layer addAnimation:anim forKey:nil];
[layer setTransform:combinedTransform];
//如果没有这句,layer执行完动画又会返回最初的state