Câu trả lời:
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.
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!
UIView
là một thùng chứa cho CALayers
. Đang sử dụng UIKit
.
CALayer
nơ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ì CALayers
khô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.
UIView
có 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
, tochesStart
như sự kiện và các UIKit
tính năng khác .
Để làm việc với việc CALayers
sử 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 UIView
là đủ.
Đ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.
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