Работа с drawRect несколько звонков - PullRequest
4 голосов
/ 24 июля 2010

Я обнаружил, что мой drawRect вызывается более одного раза.К сожалению, это привело к неприятному побочному эффекту двойного рисования всего, потому что все мои подпредставления нарисованы в drawRect (я - строгий атеист по отношению к Интерфейсному Разработчику).

Каков наилучший способ справиться с несколькими вызовамирисовать?Флаг, чтобы проверить, вызывается ли он снова?Или очистить весь вид и перерисовать с нуля (как я это сделал?)

Ответы [ 2 ]

2 голосов
/ 24 июля 2010

Что вы подразумеваете под "ваши подпредставления нарисованы в drawRect"?Если вы имеете в виду, что вы делаете вызовы -addSubview: в вашем drawRect не делайте этого.Переместите их в более подходящее место, которое вызывается только тогда, когда это необходимо (вероятно, -initWithFrame: метод для вашего представления, если там есть подпредставления всегда ), и используйте drawRect только для выполнения пользовательского рисования.

Строго говоря, многократный вызов - это весь смысл -drawRect.Он призван обновить небольшие части вашего представления, когда это необходимо.На самом деле он вызывается довольно часто, если вы обновляете свое представление (перемещаете его, обновляете суперпредставление и т. Д.), Поэтому оно должно быть максимально простым и быстрым, чтобы избежать проблем с производительностью.

0 голосов
/ 24 июля 2010

Когда UIKit вызывает drawRect:, графический контекст, настроенный для рисования, уже должен быть очищен для вас (если вы не установили свойство clearsContextBeforeDrawing в NO).Возможно, вы звоните drawRect: вручную вместо вызова setNeedsDisplay / setNeedsDisplayInRect:?

Кроме того, каждое представление отвечает за отрисовку только своего собственного содержимого и не содержание его подпредставлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...