2013-05-22 1 views
0

Попытка добавить NSView к существующему NSView, но я неудачно по какой-то странной причине. Я делаю это:NSView невидимый, если я не переопределяю drawRect, а затем он обрезается, даже если setMasksToBounds NO на уровне супервизора

 _resizeView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 10, 10)]; 
    [_resizeView.layer setBorderWidth:2]; 
    [_resizeView.layer setBorderColor:[NSColor purpleColor].CGColor]; 
    [_resizeView.layer setBackgroundColor:[NSColor blackColor].CGColor]; 
    [_resizeView setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin | NSViewMaxYMargin]; 
    [self addSubview:_resizeView]; 

Пробовал удалить маску авторезистировки, но это все еще не сработало. Итак, я изменил его с NSView на NSButton, и это волшебным образом работает, и вид виден.

Создал собственный подкласс NSView, где я переопределяю drawRect, а затем он становится видимым, но только для путей, которые я нарисовал там (да, я называю super drawRect). Что здесь происходит?

Итак, я понял, что в основном я делаю коробку с рамкой (цвет фона только для тестирования). Я мог бы просто продолжать использовать мой подкласс, но потом я попытаюсь добавить это в угол моего существующего вида , слегка приклеиваясь, и он замаскирован, даже если у меня установлено setMasksToBounds для NO для основного слоя представления, к которому я добавляю его.

Я схожу с ума здесь! Почему ничто из этого не работает так, как ожидалось?

ответ

3

Если вы используете вид слоя спинками вы должны вызвать

[_resizeView setWantsLayer:YES]; 

И возможно

[_resizeView setNeedsDisplay:YES]; 

, но я не думаю, что это так, потому что это просто NSView.

+0

setWantsLayer: Да исправлена ​​проблема с тем, что она не видна. Тем не менее опыт обрезки. –

1
[_resizeView setNeedsDisplay:YES]; 

Всякий раз, когда данные или состояния, используемые для рисования изменений вид объекта, вид должен быть отправлен в setNeedsDisplay: сообщение.