2012-03-14 33 views
11

Tôi có một chương trình trong đó một CALayer phải được xoay về giá trị nhất định. Làm cách nào để xác định vòng quay hiện tại của một CALayer? Tôi có một UIRotationGestureRecognizer mà xoay lớp:Xác định số lượng một CALayer đã xoay

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if (gestureRecognizer == rotationGestureRecognizer) { 
     NSLog(@"gestureRecRotation: %f", rotationGestureRecognizer.rotation); 
     CATransform3D current = _baseLayer.transform; 
     _baseLayer.transform = CATransform3DRotate(current, rotationGestureRecognizer.rotation * M_PI/180, 0, 0, 1.0); 
    } 
} 

tôi bắt đầu với một lớp mà đã được luân chuyển một số tiền nhất định để phù hợp với một câu đố. Vậy làm thế nào để có được vòng quay hiện tại của lớp?

Trả lời

20

Bạn có thể làm toán và nhận được góc như thế này:

CATransform3D transform = _baseLayer.transform; 
CGFloat angle = atan2(transform.m12, transform.m11); 

Nhưng đó là dễ dàng hơn để làm như sau:

CGFloat angle = [(NSNumber *)[_baseLayer valueForKeyPath:@"transform.rotation.z"] floatValue]; 

Từ documentation:

Hoạt ảnh chính mở rộng giao thức mã hóa khóa-giá trị thành cho phép nhận và thiết lập các giá trị chung của ma trận CATransform3D của lớp thông qua các đường dẫn chính. Bảng 4 mô tả các đường dẫn chính mà thuộc tính chuyển đổi của lớp và thuộc tính sublayerTransform là mã hóa khóa-giá trị và tuân thủ tuân thủ

+0

Cảm ơn bạn đã trả lời, – KaasCoder

Các vấn đề liên quan