Странное поведение для drawRect: переопределение NSView? - PullRequest
2 голосов
/ 16 мая 2011

Приветствую всех,

Прежде всего, спасибо всем за помощь в ответе на мои предыдущие вопросы.

Я вижу странное поведение при переопределении drawRect: для NSView.У меня есть очень простой подкласс NSView (RoundedView), который переопределяет только drawRect.Я установил класс пользовательского представления в RoudedView в конструкторе интерфейса.Внутри этого представления у меня есть ярлык.drawRect: вызывается правильно, как и ожидалось, но, к моему удивлению, RoundedView drawRect: также вызывается для Label внутри этого представления.Это приводит к тому, что прямоугольник для метки будет нарисован drawRect, который предназначался только для пользовательского представления, а не для любых других элементов в этом представлении.В результате прямоугольник для метки не является правильным.Пользовательское представление находится внутри окна, для которого styleMask установлено в NSBorderlessWindowMask.

Это правильное поведение?Как предотвратить вызов drawRect для элементов, являющихся частью представления?

Я просмотрел все связанные посты здесь, в стеке, но, к сожалению, вышел пустым.

Спасибо,

Роберт

1 Ответ

3 голосов
/ 16 мая 2011

Не ожидайте, что прямоугольник, переданный drawRect:, всегда будет границами вашего представления. NSView может перерисовывать только те части, которые нуждаются в перерисовке (поэтому параметр называется dirtyRect). В этом случае метка перекрывает содержимое вашего представления, поэтому всякий раз, когда оно перерисовывается, системе представления также необходимо перерисовывать представление позади него (вашего).

Если рисунок вашего вида не очень сложный, вы можете просто проигнорировать переданный вам прямоугольник и использовать вместо него границы представления, в противном случае вам нужно будет выяснить, как нарисовать только ту часть вашего вида, которая является 'грязный'.

...