2012-07-20 33 views
6

Tôi đã bắt đầu sử dụng CATransform3D gần đây và có vẻ như rất hay. Tôi chỉ có 1 vấn đề với vòng xoay mặc dù. Tôi đang cố xoay chế độ xem 360 độ sang bên phải nhưng nếu tôi chỉ cần chuyển 360 độ sang CATransform3Đánh giá nó không hoạt động (nó chỉ không di chuyển chút nào.)CATransform3DRotate xoay 360 độ

Đây là mã của tôi:

 CALayer *layer = dock.layer; 
     CATransform3D r = CATransform3DIdentity; 
     r.m34 = 1.0/-500; 
     r = CATransform3DRotate(r, DegreesToRadians(360.0f), 100.0f, 1.0f, 100.0f); 
     layer.transform = r; 

Có ai biết cách khắc phục sự cố này không? Cảm ơn trước! :)

+0

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

+0

@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 đủ. –

+0

@robmayoff ah. được. – htinlinn

Trả lời

22

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.xtransform.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]; 
Các vấn đề liên quan