Прежде всего, я обнаружил, что онлайн-документы iPhone не очень-то очень понятны, когда речь заходит о различных способах рендеринга слоя. Я получаю его, но я не понимаю, когда использовать какие методы и который требует добавления слоя в качестве подслоя или нет.Жесткие проблемы с CALayer
Мой проект начался тривиально со мной, загружая изображения и просто рисуя их в UIView через [image drawAtPoint:], а также [image drawInRect:]. Они отлично работают с использованием текущего графического контекста.
Тогда сегодня мне довелось прочитать эту концепцию использования слоев, чтобы анимация моих различных изображений (неявно) теоретически была бы бриз!
Для записи я знаю, что документы говорят, что подклассы CALayer не нужны, но я сделал именно это. Теперь я невероятно запутался в разных способах якобы визуализации слоя.
- drawLayer
- DisplayLayer
- дисплей
- drawInContext
Теперь для всех этих методов, это требуется, чтобы установить размер кадра слоя? Требуется ли добавить слой к слою представления?
Единственный метод, который дает мне видимые результаты, - метод drawinContext. Но если я применяю неявную анимацию (например, image.opacity = 0), ничего не происходит, что заставляет меня полагать, что мой слой настроен неправильно.
Некоторые из них, пожалуйста, верните порядок в этот хаос.
То, что я закончил делать, является подклассом (потому что мои объекты сложны), и я сам делегировал делегат. Таким образом, в основном я использую displayLayer. Все, что мне нужно сделать, это вызвать setNeedsDisplay слоя. Итак, теперь остается вопрос об использовании drawInContext и drawLayer: inContext. Вызывается ли это вручную или вызывается внутренне через SetNeedsDisplay? Теперь просто любопытно. – AlvinfromDiaspar
Вот еще более важный вопрос: Теперь я могу сделать слой с использованием слоя drawLayer: (CALayer *). Однако, если я хочу обновить рендеринг, скажем, анимационный кадр на слое, если я установил содержимое слоя с обновленным изображением *, содержимое исчезнет на экране. Нужно ли удалить слой, а затем визуализировать его, а затем снова добавить в дерево рендеринга? Если это так, это ударит! – AlvinfromDiaspar
К вашему первому вопросу: drawInContext: никогда не следует вызывать напрямую, но косвенно запускается setNeedsDisplay. Если вы не переопределили этот метод, я верю, что он вызывает делегата, чтобы помочь отобразить содержимое через -drawLayer: inContext: –