经过Apple的进一步研究 示例代码 我发现,如果您使用的是图层托管视图,则必须自行处理由于模型更改而需要的屏幕更新。调用 setNeedsDisplay:YES 在NSView上不会做任何事情。
setNeedsDisplay:YES
因此,如果必须更新视图,则必须要编写一个像reloadData这样的方法,并且应该调用它 setNeedsDisplay 在每个需要刷新的CALayer上。我仍然不确定根层上对此方法的调用是否会传播到所有子层,但我不这么认为。
setNeedsDisplay
我现在通过电话解决了这个问题 setNeedsDisplay 在需要回收的个人CALayers上。它没有问题。
还有一种经常使用的做法是使用一个空的“画笔”,一个la -(void) drawRect:(NSRect)dirtyRect {} 帮助强迫事物进入绘画, 我相信 通过好的ole view.needsDisplay = YES; 。
-(void) drawRect:(NSRect)dirtyRect {}
view.needsDisplay = YES;
应该指出的是......确实发生了什么 - 通过说你的 NSView *view; 是 layer.delegate = view; 导致图层被绘制时 [layer setNeedsDisplay]; 被称为......通过 - (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {...} ..
NSView *view;
layer.delegate = view;
[layer setNeedsDisplay];
- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {...}
同样的说法......说的时候 layer.layoutManager = view ......随后的要求 [layer setNeedsLayout]; 只有当时才会实现 - (void) layoutSublayersOfLayer:(CALayer *)layer {..} 方法实现..
layer.layoutManager = view
[layer setNeedsLayout];
- (void) layoutSublayersOfLayer:(CALayer *)layer {..}
这些至关重要的概念在Apple的文档中被掩盖或散落......而且它们对于使任何东西完全无效至关重要。