-[NSView updateLayer:]
此方法的目的是由NSView
子类覆盖,以便您可以自定义衬层。默认情况下,将使用-[NSView drawRect:]
,并且您不应该直接操作背层(就像在iOS上使用UIView
一样)。如果要自定义支持层,则应使用-updateLayer
并以这种方法执行自定义。要选择使用updateLayer
而不是drawRect:
,请覆盖-[NSView wantsUpdateLayer]
并返回YES
。现在,您可以更改-updateLayer
内衬层上的任何属性。要通知视图需要进行更改,您可以使用needsDisplay
属性并将其设置为YES
,当它执行渲染过程时将触发-updateLayer
。知道控制重画触发时间的layerContentsRedrawPolicy
属性也是一件好事。
示例用法:
@implementation MyView
- (BOOL)wantsUpdateLayer {
return YES;
}
- (void)updateLayer {
// Perform different customizations based on view/control state.
self.layer.backgroundColor = NSColor.redColor.CGColor;
self.layer.contents = <some image>;
}
@end
// Example of notifying MyView instance that it needs to update itself
myView.needsDisplay = YES;
我最近在这个话题上做了的video的无耻插件。
-[CALayer displayLayer:]
此呼叫特定于CALayer。如果您不使用NSView,那么可以通过调用-[CALayer setNeedsDisplay]
来通知CALayer需要更改。
简而言之,如果要处理NSView
,并希望完全控制衬里层,则必须重写-wantsUpdateLayer
以返回YES
并实现-updateLayer
。如果您直接使用CALayer
(不涉及NSView
),则在这里使用委托很有用。