Каковы отношения между UIView и CALayer - PullRequest
5 голосов
/ 29 июля 2011

Итак, вот мое понимание: в классах UIView и CALayer есть setNeedsDisplay, UIView - составной класс, который включает CALayer. Но UIView использует drawRect:, в то время как CALayer использует drawLayer:inContext: Они оба используют setNeedsDisplay для вызова. Это какой-то протокол или что-то? Так что я думаю, что в какой-то момент в реализации UIView создается CALayer, и делегату этого слоя присваивается класс UIView? Каковы именно отношения между этими двумя классами? То есть drawRect: в UIView в основном анализирует его содержимое и вызывает drawLayer:inContext: своего слоя? Что это за шаблон дизайна? Я пытаюсь понять, как работают эти два класса, спасибо.

1 Ответ

0 голосов
/ 29 июля 2011

Это все детали реализации Apple, поэтому я точно не знаю. Кроме того, разные классы представлений будут иметь разные отношения со своим слоем.

Например, UIImageView - это явно задокументированный до , а не вызов drawRect:. Возможно, это связано с тем, что установка изображения фактически обновляет свойство слоя contents напрямую, без использования методов рендеринга.

Тем не менее, я думаю, что основное поведение UIView заключается в том, что setNeedsDisplay просто перенаправляет вызов на уровень. Затем, когда drawLayer:inContext: вызывается в представлении, он устанавливает контекстный материал UIGraphics и вызывает drawRect:.

...