Post

Replies

Boosts

Views

Activity

CALayer Subclass redraw understanding issue
Hello, I created a subclass of CALayer. But the Software isn't behaving as I expect it, maybe someone can explain to me what I am misunderstanding. The subclass inherits a function changecolor() which gets called just for test 1s after start within a timer callback. The function currently just sets the background color of the layer to a different value. If I do this, I get the following error: Test3/ViewController.swift:62: Fatal error: Use of unimplemented initializer 'init(layer:)' for class 'Test3.timeRuler' I have to implement override init(layer: Any) {             super.init(layer: layer)         } to get it working. Then the Layers color is updated as expected. BUT WHAT I EXPECTED: I expected that a change in background color does not need a reinitialization of the layer, I expected that the change first does nothing, and the layer gets redrawn if I set the layers  setNeedsDisplay(). The draw and display functions are never called somehow. They are however called if I call  setNeedsDisplay() but the color changes anyway if override init(layer: Any) is defined. What am I missing here? class timeRuler :CALayer{         override init() {             super.init();             frame = NSRect(x: 0, y: 0, width: 300, height: 300);             backgroundColor=NSColor.blue.cgColor;         }         func changecolor(){                        backgroundColor=NSColor.purple.cgColor; //setNeedsDisplay()         }       /*  override init(layer: Any) {             super.init(layer: layer)         }*/         override func draw(in ctx: CGContext) {             super.draw(in: ctx);             print("layer draw update");         }         override func display() {             //backgroundColor=NSColor.blue.cgColor;             super.display();             print("layer update");         }         required init?(coder: NSCoder) {             fatalError("init(coder:) has not been implemented")         }     }
2
0
2.8k
Oct ’22
CALayer Subclass redraw understanding issue
Hello, I created a subclass of CALayer. But the Software isn't behaving as I expect it, maybe someone can explain to me what I am misunderstanding. The subclass inherits a function changecolor() which gets called just for test 1s after start within a timer callback. The function currently just sets the background color of the layer to a different value. If I do this, I get the following error: Test3/ViewController.swift:62: Fatal error: Use of unimplemented initializer 'init(layer:)' for class 'Test3.timeRuler' I have to implement override init(layer: Any) {             super.init(layer: layer)         } to get it working. Then the Layers color is updated as expected. BUT WHAT I EXPECTED: I expected that a change in background color does not need a reinitialization of the layer, I expected that the change first does nothing, and the layer gets redrawn if I set the layers  setNeedsDisplay(). The draw and display functions are never called somehow. They are however called if I call  setNeedsDisplay() but the color changes anyway if override init(layer: Any) is defined. What am I missing here? class timeRuler :CALayer{         override init() {             super.init();             frame = NSRect(x: 0, y: 0, width: 300, height: 300);             backgroundColor=NSColor.blue.cgColor;         }         func changecolor(){                        backgroundColor=NSColor.purple.cgColor; //setNeedsDisplay()         }       /*  override init(layer: Any) {             super.init(layer: layer)         }*/         override func draw(in ctx: CGContext) {             super.draw(in: ctx);             print("layer draw update");         }         override func display() {             //backgroundColor=NSColor.blue.cgColor;             super.display();             print("layer update");         }         required init?(coder: NSCoder) {             fatalError("init(coder:) has not been implemented")         }     }
Replies
2
Boosts
0
Views
2.8k
Activity
Oct ’22