Sự khác biệt giữa UIView và CALayer là gì?


103

Cả hai đều có hầu hết các thuộc tính giống nhau, cả hai đều hỗ trợ các loại hoạt ảnh khác nhau, cả hai đều đại diện cho dữ liệu khác nhau. Sự khác biệt giữa UIView và CALayer là gì?

Câu trả lời:


224

Trên iOS, mọi UIView đều được hỗ trợ bởi Core Animation CALayer, 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. Không giống như NSView trên Mac, được phát triển trước khi Core Animation tồn tại, UIViews được thiết kế để trở thành các trình bao bọc nhẹ xung quanh các CALayers này.

Như tôi mô tả trong câu hỏi tương tự "Khi nào sử dụng CALayer trên Mac / iPhone?" , làm việc trực tiếp với CALayers không mang lại 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 phần tử giao diện người dùng với CALayers thay vì UIViews là nó có thể được chuyển sang Mac rất dễ dàng. UIViews rất khác với NSView, nhưng CALayers gần như giống hệt nhau trên hai nền tảng. Đây là lý do tại sao khung Core Plot đưa ra các biểu đồ của nó bằng cách sử dụng CALayers thay vì các phần tử giao diện người dùng khác.

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

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


40

Từ blog Ray Wenderlich ( Hướng dẫn )

CALayers đơn giản là các 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 chờ một phút,” bạn có thể nói, “đó là những gì UIViews dành cho!” Điều đó đúng, nhưng có một mẹo nhỏ: mọi UIView đều chứa một lớp gốc mà nó vẽ đến!


33

Nói một cách đơn giản, UIView kế thừa từ UIResponder, xử lý các sự kiện từ người dùng, chứa CALayer, kế thừa từ NSObject, chủ yếu tập trung vào kết xuất, hoạt ảnh, v.v.


7

UIViewlà một thùng chứa cho CALayers. Đang sử dụng UIKit.

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

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

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

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

Để làm việc với việc CALayerssử dụng kiến ​​thức Đồ họa cốt lõi. Đối với bất kỳ kết xuất chế độ xem đơn giản nào UIViewlà đủ.


0

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


0

UIView: Chế độ xem có bố cục phân cấp phức tạp hơn. Họ có thể nhận được các tương tác của người dùng như nhấn, vuốt, cắt và hơn thế nữa. Làm việc với UIViews xảy ra trên luồng chính, có nghĩa là nó đang sử dụng sức mạnh của CPU.

CALayer: Mặt khác, các lớp có hệ thống phân cấp đơn giản hơn. Điều đó có nghĩa là chúng được giải quyết nhanh hơn và vẽ trên màn hình nhanh hơn. Không có chi phí chuỗi phản hồi không giống như với lượt xem. Các lớp được vẽ trực tiếp trên GPU. Nó xảy ra trên một luồng riêng biệt mà không tạo gánh nặng cho CPU.

Để biết thêm chi tiết: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.