2013-04-22 20 views
5

Tôi đang làm động một CALayer bằng cách sử dụng CABasicAnimation và hy vọng lớp sẽ vẫn ở vị trí khi hoạt ảnh hoàn tất. Gần như tất cả các giải pháp hiển thị như sau, trong đó hoạt động tốtCách đúng để ngăn lớp biến mất trong CABasicAnimation?

animation.removedOnCompletion = NO; 
animation.fillMode = kCAFillModeForwards; 

Tuy nhiên, WWDC loa 2010 tại các Animation cốt lõi trong thực tiễn Phần 1 (~ 38-41mins) nói rằng hầu hết các giải pháp cho các lớp biến mất được tìm thấy là " giả mạo" và cách chính xác để animate một lớp được xấp xỉ sau

animation.fromValue = [NSNumber numberWithFloat:layer.position.y]; 
layer.position = CGPointMake(layer.position.y, endPoint); 
animation.toValue = [NSNumber numberWithFloat:endPoint]; 

lý do đưa ra là giải pháp removedOnCompletion/fillMode chỉ đóng băng các lớp trình bày và lớp thực tế vẫn có vị trí thiết lập ban đầu của nó.

Vui lòng sửa tôi nếu tôi đã diễn giải sai loa.

Nếu tôi đã hiểu chính xác anh ấy, khi nào thì nó quan trọng?

Xin cảm ơn, Steve

Trả lời

2

Nó phụ thuộc vào những gì bạn muốn làm ... Lời giải thích của riêng bạn có vẻ khá rõ ràng.

Nếu bạn chỉ tạo hoạt ảnh mà không thay đổi giá trị thực, thì "những gì bạn thấy" thực sự khác với "cái gì". Hầu hết thời gian, bạn không muốn điều đó. (Và khi bạn sử dụng các hoạt ảnh UIView hoặc CALayer hoạt ảnh ngầm, "cái gì" và "những gì bạn thấy" được đồng bộ hóa, phù hợp với cú pháp setter trực tiếp).

Nhưng trong một số trường hợp, nó có thể hữu ích để bảo tồn giá trị thực, và hiển thị tạm thời một cái gì đó khác trên màn hình ... miễn là bạn biết bạn đang làm gì!

+0

Cảm ơn bạn đã trả lời - xin lỗi tôi ở đây hơi chậm. Tôi có thể không bao giờ đi qua sự cần thiết phải làm một cái gì đó nhiều hơn với các lớp trình bày hoặc lớp thực tế đó là lý do tại sao tôi phải vật lộn với hai phương pháp. Cảm ơn một lần nữa. Steve – Steve

1

Bạn hiểu điều đó đúng.

Điều đó có nghĩa là khi bạn thực hiện hoạt ảnh trên một lớp, lớp "đặc biệt" được gọi là "lớp trình bày" được tạo và hoạt ảnh thực sự diễn ra trên đó, nhưng lớp thực sự không bị thay đổi. Trên thực tế, bạn PHẢI thiết lập thuộc tính cho lớp ở cuối hoạt ảnh để "đồng bộ hóa" lớp với trạng thái hoạt ảnh cuối cùng.

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