-[NSView updateLayer:]
Целью этого метода является переопределение подклассом NSView
, чтобы можно было настроить вспомогательный слой. По умолчанию будет использоваться -[NSView drawRect:]
, и вы не должны манипулировать обратным слоем напрямую (как вы могли бы с UIView
на iOS). Если вы хотите настроить слой подложки, вы должны использовать -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;
Бесстыдный плагин видео , который я сделал в этом топи c совсем недавно.
-[CALayerDelegate displayLayer:]
Этот вызов задан c для CALayer. Если вы не имеете дело с NSView, то вы можете получить уведомление о том, что CALayer нуждается в изменении в результате вызова -[CALayer setNeedsDisplay]
.
Короче говоря, если вы имеете дело с NSView
и Чтобы иметь полный контроль над слоем поддержки, вы должны переопределить -wantsUpdateLayer
, чтобы вернуть YES
и реализовать -updateLayer
. Если вы непосредственно используете CALayer
s (без NSView
участия), тогда делегат может быть полезен здесь.