Я максимально использую setNeedsDisplayInRect:
в своем подклассе UIView, но не знаю, что делать в drawRect:
. Как лучше всего определить, какие части UIView нужно нарисовать? Прямо сейчас я разделил свой UIView на несколько CGRect
. Для каждого CGRect
я звоню CGRectContainsRect()
, чтобы проверить, нужно ли рисовать этот CGRect
. Это правильный способ или есть лучший способ?
Самый эффективный способ частичного рисования UIView в drawRect:
Ответы (2)
Перед вами классическая задача пространственного разделения. В зависимости от сложности вашего представления вы можете использовать разные стратегии, чтобы определить, что нужно нарисовать. Если ваша сцена очень проста, то рисование всего или разбиение сцены на отдельные области и проверка ограничивающего прямоугольника - это нормально. Для очень сложных сцен существует несколько хороших структур данных (таких как октодеревья) для представления вашей сцены в виде дерева и выполнения пространственных запросов для объектов в заданной области.
Ознакомьтесь с темой пространственного разбиения в Википедии: http://en.wikipedia.org/wiki/Space_partitioning а>
Вы захотите нарисовать любой прямоугольник, который хотя бы частично находится в недействительном прямоугольнике, поэтому вы захотите использовать CGRectIntersectsRect()
. Сказав это, я видел несколько случаев, когда имеет смысл частично рисовать UIViews - если у вас нет очень большого одиночного представления внутри представления прокрутки, вы также можете нарисовать его целиком.