Как узнать, когда CATiledLayer отобразил все видимые плитки?
Я работаю над приложением, где я делаю PDF-контент в CATiledLayer. Я хочу запустить один метод после завершения обработки слоя.
Есть ли какой-либо метод делегата, который будет вызываться сразу после завершения всех видимых фрагментов? Есть ли другой способ узнать, когда это будет завершено?
Ответы
Ответ 1
Вы можете рассчитать количество плиток, необходимое вашему рисунку, прежде чем нарисовать его. В drawRect tilingview каждая плитка рисуется только ONCE. Поэтому поставьте счетчик в части вытягивающего прямоугольника, который вызывает новую плитку. Когда ваш счетчик достигнет общего числа, вызовите ваш метод.
Имейте в виду, что drawrect для tiling выполняется в фоновом потоке.
Ответ 2
Для этого требуется определенное творческое мышление. У меня была аналогичная проблема, когда мне нужно было прервать рендеринг черепичного слоя в середине цикла. Способ, которым я работал вокруг, несколько сложный, но, похоже, работает достаточно хорошо. Он включает в себя обертывание вызовов рисования на черепичный слой внутри NSThread
. В потоках есть isFinished
bool, который вы можете наблюдать за ключом, чтобы узнать, когда сломанный слой завершил рендеринг.
Если вам не нравится потоки в iOS, это может быть больше проблем, чем его ценность, но даст вам преимущество знать, когда рендеринг закончен, а также может отменить операцию потока (и, следовательно, рендеринг), если требуется.