2009-07-16 37 views
72

Tôi đang gặp khó khăn với việc định hình hoạt ảnh bằng CALayer như trái ngược với Phương thức hoạt ảnh của riêng UIView. Hãy ném "Core Animation" vào đây và, có thể ai đó có thể nói rõ các khái niệm này từ cấp cao để tôi có thể hình dung rõ hơn những gì đang diễn ra và tại sao tôi muốn di chuyển hoạt ảnh UIView (mà giờ đây tôi đã khá quen thuộc) cho hoạt ảnh CALayer trên iPhone. Mọi chế độ xem trong Cocoa-Touch sẽ tự động nhận được một lớp. Và, có vẻ như, bạn có thể tạo ảnh động một và/hoặc cái kia?!? Thậm chí trộn chúng lại với nhau?!? Nhưng tại sao? Đường dây ở đâu? Các pro/con cho mỗi là gì?Hoạt ảnh UIView so với CALayers

Hướng dẫn lập trình hoạt ảnh lõi ngay lập tức nhảy vào Lớp & Lớp thời gian và tôi nghĩ cần phải lùi lại một bước và hiểu tại sao những phần khác nhau tồn tại và cách liên quan với nhau.

+3

Đây là một câu hỏi có mục đích chung tuyệt vời và tất cả các câu trả lời đều tuyệt vời. Tôi đã bỏ phiếu cho tất cả mọi người về chủ đề này. – mobibob

+0

Câu hỏi hay. Có ai biết thực hành tốt nhất cho animating một CALER UIView?Trong ví dụ của tôi, tôi cần một hiệu ứng 3D và tôi thấy hoạt ảnh của lớp khiến khung 'khung' của UIView bị lệch với lớp (vì vậy đối với một nút, các lần nhấn sẽ không khớp với nhau nữa). – Marc

Trả lời

53

Sử dụng chế độ xem để kiểm soát và lớp cho kẹo mắt. Lớp không nhận sự kiện để dễ dàng hơn khi sử dụng chế độ xem cho những trường hợp đó, nhưng khi bạn muốn tạo hiệu ứng hình ảnh hoặc hình nền, v.v., các lớp có ý nghĩa. Sự kiện chuyển qua phải các lớp tới chế độ xem sao lưu để bạn có thể có một đại diện trực quan đẹp mắt mà không làm rối loạn các sự kiện của mình. Cố gắng che phủ chế độ xem mà bạn chỉ sử dụng để trình bày trực quan và bạn sẽ phải tự mình truyền các sự kiện chạm vào chính chế độ xem cơ bản.

+1

Điều đó đã giúp, cảm ơn :) – Spanky

+0

Đây là một câu trả lời tuyệt vời. Cảm ơn bạn! – Warpling

9

Biến đổi UIView chỉ 2D và bị hạn chế, biến đổi LAyer có thể là 3D và bạn nên sử dụng những công cụ này nếu bạn muốn làm công cụ 3D, hoạt ảnh UIView sẽ hoạt động nếu bạn thay đổi chuyển đổi UIView hoặc chuyển đổi CALayer. Vì vậy, ở một mức độ cơ bản, bạn có thể thực hiện nhiều thao tác hơn khi bạn đang làm việc với một Lớp thay vì Chế độ xem.

24

An UIView luôn được hiển thị là CALayer. Khi bạn sử dụng các phương thức UIView để tạo hoạt ảnh cho chế độ xem, bạn đang thao tác một cách hiệu quả phần dưới CALayer.

Nếu bạn cần làm những việc đơn giản, hãy sử dụng phương thức UIView. Đối với các vị trí phức tạp hơn hoặc nếu bạn muốn các lớp không được liên kết với bất kỳ chế độ xem nào cụ thể, hãy sử dụng CALayers.

20

Tôi đã thực hiện một loạt ứng dụng trong năm qua. Dưới đây là quy tắc chung của tôi:

  1. Sử dụng UIView cho đến khi nó không hoạt động theo ý bạn muốn.
  2. Sau đó chuyển đến CoreAnimation. Nhưng trước khi bạn nhận được nó quá nhiều ...
  3. Nếu bạn viết nhiều hơn một vài hình động, hãy sử dụng Cocos2D.
+0

Cocos2D làm gì tốt hơn? Bạn không có vấn đề khác sau đó, liên quan đến việc xử lý sự kiện cảm ứng và nhiều thứ khác mà bỏ lỡ trong OpenGL ES? – Thanks

+0

Cocos2D bổ sung thêm rất nhiều phương pháp tiện lợi, vì vậy mã nhỏ hơn rất nhiều. Chúng có một số hiệu ứng tích hợp tuyệt vời. Tóm lại, nếu bạn đang làm một loạt các hình ảnh động, bạn sẽ viết ít mã hơn OpenGL ES hoặc Core Animation nếu bạn sử dụng Cocos2D. Họ có phương pháp xử lý cảm ứng của riêng mình, vì vậy đó không phải là vấn đề gì cả. –

+13

Đề xuất của tôi không được sử dụng Cocos2D trừ khi bạn đang viết một trò chơi. Tôi nghĩ rằng đó thực sự là trường hợp sử dụng tốt nhất của nó. Mặc dù vậy, tôi đồng ý rằng bạn nên sử dụng hoạt ảnh UIView cho tới chừng nào bạn có thể, và cho bất kỳ thứ gì ngoài việc sử dụng CoreAnimation. –

2

Tôi không chắc liệu tôi có hiểu lầm phản ứng của Chris đối với "Cocos2D có làm gì tốt hơn không? Bạn không có vấn đề gì khác, liên quan đến xử lý sự kiện liên lạc và nhiều thứ khác bị bỏ qua trong OpenGL ES?"

Có vẻ như câu trả lời cho thấy Cocos2D không dựa trên khuôn khổ OpenGL ES khi thực tế nó là thực tế. Mặc dù nó là một công cụ game 2D tuyệt vời nhưng nó thực hiện OpenGL cho phần lớn sự kết xuất của nó - gắn liền với một thư viện vật lý, nó cho phép rất nhiều khả năng thú vị cho hoạt hình - và Chris chính xác - nó thực sự ít mã hóa hơn.

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