2011-02-08 40 views
5

Đây là mã hoạt hình của tôi:CATransformLayer không hỗ trợ hoạt ảnh ngầm?

CGFloat zDistance = 850; 
CGFloat scaleFactor = BACK_COVER_WIDTH/self.transformLayer.bounds.size.width; 
CATransform3D rotation = CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0); 
CATransform3D scale = CATransform3DMakeScale(scaleFactor, scaleFactor, 0.0); 
CATransform3D transform = CATransform3DConcat(rotation, scale); 
transform.m34 = 1.0/-zDistance; 
CGPoint location = CGPointMake(CGRectGetMidX(self.layer.frame), CGRectGetMidY(self.layer.frame)); 
[CATransaction begin]; 
[CATransaction setAnimationDuration:1.0]; 
self.transformLayer.transform = transform; 
self.transformLayer.position = location; 
[CATransaction commit]; 

self.transformLayer là một CATransformLayer với hai lớp con, một cho phía trước và một cho mặt sau (Tôi đang tạo ra một "lật" có hiệu lực). Tuy nhiên, mã này chỉ đặt vị trí và chuyển đổi mà không có hoạt ảnh. Vì vậy, tôi nghĩ rằng có lẽ transform không hỗ trợ hoạt ảnh tiềm ẩn, vì vậy tôi đã thực hiện điều đó và chỉ cố gắng đặt vị trí, nhưng điều đó không làm sinh động (hoặc tôi biết chắc chắn rằng position hỗ trợ hoạt ảnh ngầm).

Tôi có làm gì sai hoặc không CATransformLayer không hỗ trợ hoạt ảnh ngầm? Các tài liệu không nói bất cứ điều gì về nó không hỗ trợ nó, vì vậy tôi giả định nó.

EDIT: Đây là dành cho Mac OS X, không iOS

+0

Bạn đã thử sử dụng hoạt ảnh rõ ràng chưa? –

Trả lời

1

Tôi đã kết thúc bằng cách sử dụng hoạt ảnh khiêu dâm, nhưng câu trả lời của David Duncan here có vẻ như là một bước đi đúng hướng cho bất kỳ ai khác gặp phải vấn đề này.

0

hình ảnh động ngầm bị vô hiệu hóa cho tất cả các lớp kết hợp với UIView s. Tôi có nhiều hơn detailed response về một câu hỏi khác nếu bạn tò mò về chi tiết. Nhưng trong ngắn hạn, nếu bạn muốn hoạt ảnh trên một lớp được liên kết với chế độ xem, bạn cần phải thực hiện chúng một cách rõ ràng (tức là đính kèm CAAnimation đối tượng sử dụng -addAnimation:forKey:).

Chỉnh sửa: Hóa ra câu hỏi này là dành cho OS X và CATransformLayer thực sự là lớp con. Vui lòng bỏ qua câu trả lời này (mặc dù câu trả lời được liên kết vẫn hữu ích cho iOS).

+0

Đây không phải là dành cho iOS, nó dành cho Mac OS X. Tôi nên làm điều đó rõ ràng hơn trong bài đăng của tôi. Lớp chuyển đổi là lớp con của lớp của chế độ xem (chế độ xem là chế độ xem lớp lưu trữ). – indragie

+0

Ah hah. Trong trường hợp đó, tôi không biết. Lấy làm tiếc. –

0

Chỉ các lớp con của CATransformLayer mới được hiển thị. Vì vậy, tôi đoán là tài sản transform của nó không bao giờ được áp dụng. Bạn đã thử đặt thuộc tính sublayerTransform thay thế? Nó có vẻ như đó là những gì bạn đang đi cho anyway.

+0

Theo câu hỏi, mã của anh ta đã đặt biến đổi, nó đơn giản là không animate. –

+0

Rất tiếc. Tôi nhớ điều đó bằng cách nào đó. Có lẽ 'CATransformLayer' không hỗ trợ hoạt ảnh bất kỳ thuộc tính nào của nó? –

0

Nếu bạn thêm một lớp và cố gắng tạo hiệu ứng động trong cùng một vòng lặp chạy, hoạt ảnh sẽ không xảy ra - nó sẽ xuất hiện ngay lập tức. Bạn cần phải bọc thêm layer trong một CATransaction. Sau đó, bạn có thể tạo hiệu ứng ngầm hoặc rõ ràng. Ví dụ: thao tác này sẽ hoạt động:

[CATransaction begin]; 
[self.view.layer addSublayer:transformLayer]; 
[CATransaction commit]; 

// implicit animation will now occur because we're in the next run loop 
transformLayer.transform = newTransform; 
Các vấn đề liên quan