Core Animation之CATransform3D学习篇

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值