Bạn có thể làm động một lớp thông qua một (hoặc nhiều) quay đầy đủ xung quanh trục Z của mình bằng cách tạo hiệu ứng động transform.rotation
con đường trọng điểm của lớp, như thế này:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
animation.duration = .25;
animation.fromValue = [NSNumber numberWithFloat:0];
animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
[layer addAnimation:animation forKey:animation.keyPath];
Bạn có thể làm động xung quanh X hoặc trục Y sử dụng các đường dẫn chính transform.rotation.x
và transform.rotation.y
. (Đường dẫn khóa transform.rotation.z
có cùng tác dụng như đường dẫn khóa transform.rotation
.) Bạn có thể áp dụng nhiều phép quay, trên các trục riêng biệt, cùng một lúc.
Một cách khác để làm điều đó, mà có lẽ làm việc tốt hơn nếu bạn muốn xoay quanh một vector off-trục, là sử dụng một hình ảnh động keyframe, như thế này:
CALayer *layer = [sender layer];
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0/-50;
layer.transform = transform;
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
animation.values = [NSArray arrayWithObjects:
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 0 * M_PI/2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 1 * M_PI/2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 2 * M_PI/2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 3 * M_PI/2, 100, 1, 100)],
[NSValue valueWithCATransform3D:CATransform3DRotate(transform, 4 * M_PI/2, 100, 1, 100)],
nil];
animation.duration = 2;
[layer addAnimation:animation forKey:animation.keyPath];
bạn đang cố gắng để xoay 180 hoặc 360 độ ? Bởi vì tôi nghĩ rằng xoay 360 độ là giống như không quay ở tất cả. – htinlinn
@htinlinn Tôi nghĩ anh ấy đang cố gắng tạo hiệu ứng cho lớp của mình thông qua một vòng quay 360 độ đầy đủ. –
@robmayoff ah. được. – htinlinn