Я создал подкласс NSView
под названием DAView
, содержащий множество полезных методов для последующего повторного использования. Это отлично работает, однако drawRect:
никогда не вызывается ни в одном классе, который использует DAView
, ни в самом классе. Зачем?Подкласс NSView - drawRect: не называется
Вот как DAView
выглядит следующим образом:
DAView
@interface DAView : NSView
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.backgroundColor = [NSColor clearColor];
// Make layer-backed by default
self.wantsLayer = YES;
// Create a root layer
CALayer *_rootLayer = [CALayer layer];
_rootLayer.shouldRasterize = YES;
_rootLayer.name = DAViewRootLayerDefaultName;
self.layer = _rootLayer;
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect // never called
{
NSLog(@"Draw Rect called");
}
Теперь, если я хотел бы сделать использование этого DAView's
дополнения/методов, я сталкиваюсь с той же проблемой. Все работает отлично, за drawRect:
исключением, что, как и в DAView
'случае s, никогда не называют:
DATableView
@interface DATableView : DAView
- (void)drawRect:(NSRect)dirtyRect // never called either
{
[[NSColor grayColor] set];
NSBezierPath *_cellSeparator = [NSBezierPath bezierPath];
[_cellSeparator lineToPoint:dirtyRect.origin];
[_cellSeparator closePath];
[_cellSeparator stroke];
NSLog(@"Draw rect");
}
Однако если я изменить DATableView
' заголовок s быть подкласс NSView
, drawRect:
. Что мне не хватает?
Это не имеет значения, и я думаю, что это не может быть ответ. 'NSView', в отличие от' UIView', по умолчанию не имеет свойства 'wantLayer',' YES', но 'drawRect:' по-прежнему вызывается (за исключением моего случая по какой-либо причине), даже без слоя в качестве основы магазин. – Pripyat
ваш drawrect не вызывается даже без поддержки слоя? Чем я думаю, ваша проблема не появляется в вашем коде. –
'drawRect:' называется без поддержки слоя - извините! Но с моим слоем, это не ... как я могу объединить эти два? – Pripyat