Как мне узнать, когда CATiledLayer рендерил все видимые тайлы? - PullRequest
14 голосов
/ 22 февраля 2011

Я работаю над приложением, которое рендерит PDF-содержимое в CATiledLayer.Я хочу вызвать один метод после завершения рендеринга мозаичного слоя.

Есть ли метод делегата, который будет вызван сразу после завершения рендеринга всех видимых плиток?Есть ли другой способ узнать, когда это закончится?

Ответы [ 2 ]

3 голосов
/ 24 апреля 2011

Вы можете рассчитать количество плиток, которое требуется вашему рисунку, прежде чем он будет нарисован. В drawRect вида мозаики каждая плитка рисуется только ОДИН РАЗ. Поэтому поместите счетчик в часть прямоугольника рисования, который вызывает новую плитку. Когда ваш счетчик достигнет общего числа, позвоните вашему методу.

Имейте в виду, что рисование для листов выполняется в фоновом потоке.

0 голосов
/ 17 июня 2011

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

Если вас не устраивает многопоточность в iOS, это может быть больше проблем, чем стоит, но даст вам преимущество в том, что вы узнаете, когда закончится рендеринг, а также сможете отменить операцию потока (и, следовательно, рендеринг). ) если требуется.

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