Наиболее эффективный способ частичного рисования UIView в drawRect: - PullRequest
2 голосов
/ 20 октября 2010

Я использую setNeedsDisplayInRect: как можно больше в своем подклассе UIView, но я не знаю, что делать в drawRect:. Каков наилучший способ определить, какие части UIView должны быть нарисованы? Прямо сейчас я разделил свой UIView на несколько CGRect. Для каждого CGRect я звоню CGRectContainsRect(), чтобы проверить, нужно ли рисовать CGRect или нет. Это правильный путь или есть лучший способ?

Ответы [ 2 ]

3 голосов
/ 20 октября 2010

Вы захотите нарисовать любой прямоугольник, который хотя бы частично находится в недействительном прямоугольнике, поэтому вы захотите использовать CGRectIntersectsRect().Сказав это, я видел несколько случаев, когда имеет смысл частично рисовать UIViews - если у вас нет очень большого одиночного представления внутри представления с прокруткой, вы также можете нарисовать все это.

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

Вы смотрите на классическую задачу пространственного разделения.В зависимости от сложности вашего взгляда, вы можете использовать разные стратегии, чтобы выяснить, что нужно нарисовать.Если ваша сцена очень проста, тогда хорошо нарисовать все или разделить сцену на отдельные области и выполнить проверку ограничивающего прямоугольника.Для очень сложных сцен есть несколько хороших структур данных (например, октодеревьев) для представления вашей сцены в виде дерева и выполнения пространственных запросов для объектов в заданном регионе.: http://en.wikipedia.org/wiki/Space_partitioning

...