CALayer и получение текущего контекста его UIView - PullRequest
2 голосов
/ 25 февраля 2010

Я пытаюсь научиться рисовать в UIView в iphone. как я понимаю, процесс рисования происходит только в том случае, если существует метод [UIView drawRect]. он начинается с [ CALayer display ] и из этого метода вызывается [UIView drawRect] (если быть точным: сначала вызывается [ UIView drawLayer: layer inContext: context ] и изнутри этот метод [UIView drawRect] вызывается).

У меня есть 2 вопроса:

  1. как метод [ CALayer ] получает контекст UIView? (который используется в [ UIView drawLayer: слой inContext: context ] в методе [ CALayer display ])
  2. как происходит обновление содержимого CALayer? (обновление, которое описано в ссылке здесь: [ CALayer display ])

1 Ответ

2 голосов
/ 26 февраля 2010

Для вашего первого вопроса я бы скорее сказал, что CALayer создает контекст в терминах CGContextRef, а затем передает его представлению, являющемуся его делегатом. Что касается вашего второго вопроса, насколько я заметил, кажется, что CALayers очень близки к аппаратному обеспечению и видеопамяти. На самом деле, если вы установите CGImageRef в качестве содержимого CALayer, вы передадите изображение на экран, прямо в видеопамять (это трудоемкая операция). Поэтому я предполагаю, что CALayer получает своего рода изображение из своего CGContextRef (того, который был заполнен представлением), а затем назначает его в качестве своего содержимого. ИЛИ, может быть, созданный контекст является непосредственно пробелом в видеопамяти, и каждая операция рисования в drawRect вызывает доступ к этой памяти ...

Хотя я не эксперт по этим процессам, я могу только догадываться, что происходит из того, что я видел. Обратите внимание, что я говорю «видеопамять», но я думаю, что на iPhone такого нет, а скорее часть основной памяти, предназначенная для видео операций. Эта часть отображается, и вы можете увидеть потребление с VMTracker в инструментах. Опять же, я не уверен в этом, если у кого-то есть больше информации, я был бы рад услышать это!

...