Вызывает ли Core Animation мои подпредставления вызывать -drawRect для каждого отдельного кадра? - PullRequest
0 голосов
/ 10 апреля 2010

Я создал хороший подкласс UIView, который рисует все свои вещи в -drawRect:, потому что люди говорили, что это хорошо. Эта точка зрения является подпредставлением другого. Этот другой вид анимирован с помощью Core Animation: он уменьшен, повернут и перемещен. Тем не менее, я столкнулся с этим: -drawRect, кажется, вызывается триллион раз во время анимации, и производительность отстой.

Это нормально или я что-то не так сделал, наверное?

И я нашел это в документации UITableViewCell, что странно:

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

Итак, -drawRect: очень и очень плохо при выполнении какой-либо основной анимации? Я также помню из какого-то другого ресурса Apple, что они «не перерисовываются во время анимации». Paradoxon. Опять же.

Ответы [ 2 ]

2 голосов
/ 06 октября 2010

Если для вашего UIView's contentMode установлено значение UIViewContentModeRedraw, то, согласно документации, setNeedsDisplay будет вызываться при каждом изменении границ. Я не уверен, правда ли это во время анимации (у меня сложилось впечатление, что система анимации ведет себя по-другому), но я мог объяснить поток вызовов на drawRect.

1 голос
/ 11 апреля 2010

drawRect: следует вызывать только после вызова setNeedsDisplay: YES на ваш взгляд. Я предполагаю, что когда происходит масштабирование, ваш вид просят перерисовать. Если масштабирование, вращение и перемещение являются частью перехода, вы можете выполнить переход в кэшированном представлении.

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