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 thể hiện các dữ liệu khác nhau. Sự khác biệt giữa UIView và CALayer là gì?Sự khác biệt giữa UIView và CALayer là gì?
Trả lời
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.
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!
Đơ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
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.
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à đủ.
- 1. Sự khác biệt giữa UIWindow và UIView
- 2. Sự khác biệt giữa CALayer -drawInContext: và -renderInContext :?
- 3. Mối quan hệ giữa UIView và CALayer
- 4. Sự khác biệt và khả năng tương thích của CGLayer và CALayer là gì?
- 5. Sự khác biệt giữa addSubview và insertSubview trong lớp UIView
- 6. Sự khác biệt giữa JavaBean và POJO là gì?
- 7. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 8. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 9. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 10. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 11. Sự khác biệt giữa DBI và DBD là gì?
- 12. Sự khác biệt giữa NSInvocation và chặn là gì?
- 13. Sự khác biệt giữa fn và fn * là gì?
- 14. Sự khác biệt giữa xtype và bí danh là gì?
- 15. Sự khác biệt giữa build.sbt và build.scala là gì?
- 16. Sự khác biệt giữa localname và qname là gì?
- 17. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 18. Sự khác biệt giữa while (true) và loop là gì?
- 19. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 20. Sự khác biệt giữa uint và System.UInt32 là gì?
- 21. Sự khác biệt giữa heuristic và thuật toán là gì?
- 22. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
- 23. Sự khác biệt giữa \ r và \ n là gì?
- 24. Sự khác biệt giữa phần .got và .got.plt là gì?
- 25. Sự khác biệt giữa ascx và .cshtml là gì?
- 26. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 27. Sự khác biệt giữa Thông báo và pynotify là gì?
- 28. Sự khác biệt giữa to_a và to_ary là gì?
- 29. sự khác biệt giữa callback là gì và hứa
- 30. Sự khác biệt giữa Request.ServerVariables ["REMOTE_ADDR"] và Request.UserHostAddress là gì?
Câu trả lời hay về nghệ thuật. –
Câu trả lời ngắn tuyệt vời! –