2011-07-29 4 views
5

Vì vậy, đây là sự hiểu biết của tôi: có một setNeedsDisplay trong cả hai lớp UIView và CALayer, UIView là một lớp tổng hợp bao gồm một CALayer. Nhưng UIView sử dụng drawRect: trong khi CALayer sử dụng drawLayer:inContext: Cả hai đều sử dụng setNeedsDisplay để gọi. Đây có phải là giao thức nào đó không? Vì vậy, tôi đoán tại một số điểm trong việc thực hiện UIView, một CALayer được tạo ra và đại biểu của lớp này được thiết lập để lớp UIView? Chính xác mối quan hệ giữa hai lớp học này là gì? Vì vậy, drawRect: trong UIView về cơ bản là phân tích nội dung của nó và gọi drawLayer:inContext: của lớp của nó? Kiểu thiết kế này là gì? Tôi đang cố gắng quấn đầu quanh hai lớp này hoạt động như thế nào, cảm ơn.Mối quan hệ giữa UIView và CALayer

Trả lời

0

Đây là tất cả chi tiết triển khai của Apple nên tôi không biết chắc chắn. Ngoài ra, các lớp khung nhìn khác nhau sẽ có các mối quan hệ khác nhau với lớp của chúng.

Ví dụ: UIImageViewexplicitly documented đến không gọi drawRect:. Điều này có thể do thiết lập một hình ảnh thực sự cập nhật trực tiếp thuộc tính của lớp contents mà không phải trải qua các phương thức kết xuất.

Điều đó nói rằng, tôi tưởng tượng nhất hành vi UIView cơ bản là setNeedsDisplay chỉ cần chuyển tiếp cuộc gọi đến lớp đó. Sau đó, khi số drawLayer:inContext: được gọi trên chế độ xem, nó sẽ thiết lập nội dung ngữ cảnh UIGraphics và gọi drawRect:.