2009-08-20 1 views
4

У меня есть подкласс UIView, в котором я делаю некоторый пользовательский чертеж. Когда drawRect:(CGRect)rect получает вызов rect.size - либо (64, 63), либо (63, 64); self.frame.size - (64, 64).Условия, когда drawreect rect! = Self.frame

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

Каковы условия, которые могут привести к тому, что некоторые из этих подклассов изменили границы drawRect, но не другие?

Дополнительные лакомых кусочков:

  • self.opaque является NO
  • self.transform не действительно изменяется; Я использую его, чтобы повернуть UIView с шагом 90 градусов, но поворачивать вид не меняется rect.size на subesquent вызовов drawRect

ответ

12

Прямоугольник передается DrawRect является Прямоугольник, что система просит вас нарисовать (dirtyRect) в системе координат вашего вида.

Это может быть self.bounds, или это может быть другой rect.

Как правило, вы должны просто игнорировать параметр и нарисовать себя в self.bounds, если ваш рисунок не очень сложный. Обращая внимание на параметр dirtyRect, который передается, это оптимизация, которую следует игнорировать до тех пор, пока вы не профилировали приложение и не определили, что это горячая точка.