2011-10-19 41 views

Trả lời

195

Trên iOS, mọi UIView đều được hỗ trợ bởi Lõi hoạt hình lõi, vì vậy bạn đang xử lý CALayers khi sử dụng UIView, mặc dù bạn có thể không nhận ra nó. Không giống như NSViews trên Mac, được phát triển trước khi Core Animation tồn tại, UIViews được dự định là các trình bao bọc nhẹ xung quanh các CALayer này.

Như tôi đã mô tả trong câu hỏi tương tự "When to use CALayer on the Mac/iPhone?", làm việc trực tiếp với CALayers không mang đến cho bạn lợi thế hiệu suất đáng kể so với UIViews. Một trong những lý do bạn có thể muốn xây dựng một phần tử giao diện người dùng với CALayers thay vì UIViews là nó có thể rất dễ dàng được chuyển vào máy Mac. UIViews rất khác với NSView, nhưng CALayers gần như giống nhau trên hai nền tảng. Đây là lý do tại sao khung cốt lõi đưa ra đồ thị của nó bằng cách sử dụng CALayers thay vì các yếu tố giao diện người dùng khác.

Một điều UIView cung cấp qua CALayers là hỗ trợ tích hợp cho tương tác của người dùng. Họ xử lý các thử nghiệm hit trên chạm và các hành động liên quan khác mà bạn sẽ cần phải tự xây dựng nếu quản lý một hệ thống phân cấp của CALayers. Nó không phải là khó để thực hiện điều này cho mình, nhưng nó là mã bổ sung bạn cần phải viết khi xây dựng một giao diện chỉ có CALayer.

Bạn thường sẽ cần truy cập các lớp cơ bản cho UIView khi thực hiện các hoạt ảnh phức tạp hơn lớp UIView cơ sở cho phép. Khả năng hoạt hình của UIView đã phát triển khi iOS SDK đã phát triển, nhưng vẫn còn một vài điều được thực hiện tốt nhất bằng cách tương tác với CALayer cơ bản.

35

Từ blog Ray Wenderlich (Tutorial)

CALayers chỉ đơn giản là lớp đại diện cho một hình chữ nhật trên màn hình với nội dung trực quan. "Nhưng hãy chờ một phút", bạn có thể nói, "đó là những gì UIViews là dành cho!" Đó là sự thật, nhưng có một mẹo để: mỗi UIView chứa một lớp gốc mà nó rút ra!

+1

Câu trả lời hay về nghệ thuật. –

+0

Câu trả lời ngắn tuyệt vời! –

22

Đơn giản chỉ cần nói, UIView kế thừa từ NSResponder, xử lý các sự kiện từ người dùng, chứa CALayer, mà kế thừa từ NSObject, chủ yếu tập trung vào vẽ hoạt hình, vv

0

Sự khác biệt lớn là UIView được thiết kế cho CocoaTouch trên thiết bị di động. Nó bổ sung thêm một số trình xử lý sự kiện mà CALayer không cung cấp.

6

UIView là một vùng chứa dành cho CALayers. Sử dụng UIKit.

CALayer nơi chúng tôi vẽ nội dung. Sử dụng CoreGraphics

Nếu bạn làm việc với kiểm soát tùy chỉnh như các tính năng, thật tuyệt vời để tiếp tục với chế độ xem đơn chứa nhiều lớp để hiển thị gốc chính xác hơn. Vì CALayers là không trọng lượng hơn UIView.

Để tạo bộ xương chung cho Mac và iOS, hãy làm theo thiết kế cho ứng dụng của bạn bằng cách sử dụng CALayers. Vì nó có sẵn trong cả hai nền tảng.

UIView có tính năng như sự kiện chạm được thực hiện bằng cách sử dụng các đại biểu -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStart như sự kiện và các tính năng khác UIKit.

Để làm việc với CALayers sử dụng kiến ​​thức Đồ họa cốt lõi.Đối với bất kỳ chế độ xem đơn giản nào, hãy hiển thị UIView là đủ.

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