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
5
A
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ụ: UIImageView
là explicitly 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:
.