我第一次使用一些Core Animation,在实现我可以翻转的扑克牌的过程中,我决定使用a CALayer来显示内容(不知道我将如何获得双方,但这是另一个问题)我需要能够翻转它,移动它等等......
我正在使用CATransaction取得了一些成功 - 在下面的片段中,卡片从左下角移动到左上角并翻转.问题是,我不想以相反的方式翻转,但不知道该怎么说,"嘿,你的方向错了!"
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration];
myCard.position = CGPointMake(CGRectGetMidX(self.bounds)/2,CGRectGetMidY(self.bounds)/2);
myCard.transform = CATransform3DMakeRotation(M_PI, 1, 0, 0);
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
第二个问题是:如何让它一次完成两次变换?我试过嵌套两个CATransactions,但第二个只是覆盖了第一个.我也尝试将旋转的矢量更改为2D,就像说围绕x和y轴旋转一样,但这并不等于只用两个单独的轴来翻转它.这是嵌套代码.
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration];
myCard.position = CGPointMake(CGRectGetMidX(self.bounds)/2,CGRectGetMidY(self.bounds)/2);
myCard.transform = CATransform3DMakeRotation(M_PI, 1, 0, 0); // rotate about x
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:1.0f] forKey:kCATransactionAnimationDuration];
myCard.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0); // rotate about y
[CATransaction commit];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
这里是UIView动画块里面的......我为角度添加了滑块,为旋转矢量添加了x,y,z,为时间添加了t.翻译在时间= 2t内进行,每次旋转每次只需要t.
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:t * 2] forKey:kCATransactionAnimationDuration]; …Run Code Online (Sandbox Code Playgroud)