Tôi có NSView hỗ trợ lớp tùy chỉnh và đã bỏ qua phương thức makeBackingLayer để trả lại lớp con CALayer tùy chỉnh. Tôi cũng đã overriden wantUpdateLayer để trả về true do đó hoàn toàn chọn vào bản vẽ giống như lớp.Lớp phủ NSView được hỗ trợ với CALayer tùy chỉnh không gọi updateLayer?
override func makeBackingLayer() -> CALayer {
return Layer() // my custom class with "drawLayer:" implemented
}
override var wantsUpdateLayer:Bool{
return true
}
// never called
override func updateLayer() {
super.updateLayer()
println("updateLayer after")
self.layer?.borderWidth += 1
}
Khi tôi làm điều này, tôi thấy rằng khi tôi đặt NSView.needsDisplay = true
nó tuyến các cuộc gọi đến drawInContext lớp tùy chỉnh của: Phương pháp như trái ngược với updateLayer: phương pháp. Tại sao lại thực hiện điều này? Trong ví dụ của tôi, tôi đã kiểm tra rằng nếu tôi xóa ghi đè makeBackingLayer
thì số updateLayer
của tôi được gọi theo cách mong đợi.
Tôi không thể đặt ngón tay lên đó, nhưng các trường hợp khác trỏ đến quan niệm rằng khi makeBackingLayer returns a custom
CALayer` của bạn thực sự có lớp tùy chỉnh được lưu trữ bên trong lớp sao lưu chính. (Tinh khiết đầu cơ trên một phần của tôi)
Hơn nữa, sẽ có đặc điểm hiệu suất khác nhau giữa hai tuyến đường vẽ cho drawInContext của CALayer: là "thấp cấp"? Xem câu hỏi SO này để biết thêm chi tiết về câu hỏi đó: Layer-backed NSView performance with rendering directly in CALayer.drawInContext:
Mọi thông tin chi tiết sẽ được đánh giá cao.
Tôi có thuộc tính chính xác như bạn có ở trên. Thật không may đó không phải là câu trả lời. – Sam