«CoreAnimation: поверхность слишком большая» - PullRequest
3 голосов
/ 19 ноября 2011

Я создаю пользовательский (Layer-Host) вид документа, который содержится в виде прокрутки. Корневой слой имеет два подслоя одинакового размера - один для содержимого представления и один для всего, что нужно навести на основной контент. Я установил фрейм 2500x2500 и добавил несколько ячеек в слой контента, что было хорошо. При добавлении полупрозрачного клона одного из слоев ячейки в слой наложения весь вид кратковременно очищается, и я получаю сообщение журнала «основная анимация: поверхность 2502x2502 слишком велика». Это происходит между добавлением нового слоя и следующим циклом цикла событий, поэтому я предполагаю, что базовая анимация отображает новый слой.

Я знал, что размер содержимого слоя связан с размером текстуры opengl, но не думал, что его кадр имеет значение. Я не рисую ничего для этих слоев, не задаю никаких стилевых свойств и не удаляю заэкранные подслои. Все, для чего я на самом деле их использую, - это управление геометрией вида документа. Это правильное использование слоев CA? Если нет, то есть ли более эффективные способы обработки большого базового анимационного представления документа?

Edit:

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

1 Ответ

1 голос
/ 19 ноября 2011

Я бы удостоверился, что вы не устанавливаете какие-либо свойства для слоев 2500x2500, которые могут потребовать рендеринга за пределами экрана.(Это заставляет слой пытаться создать полноразмерный буфер вне экрана и выводить его содержимое в этот буфер, а не просто выводить содержимое на экран напрямую.)

Например, установка непрозрачности,masksToBounds, mask, shouldRasterize и т. д. могут вызвать рендеринг вне экрана.Вы можете увидеть, происходит ли закадровый рендеринг с инструментом Core Animation.(Есть флажок для выделения областей за пределами экрана.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...