2012-05-31 3 views
1

У меня есть CATiledLayer, настроенный для динамического повторного рисования некоторой графики, которую я создаю с помощью Quartz.CATiledLayer и UIScrollView, кэширование старых данных для некоторых уровней масштабирования

Этот вид добавлен как представление содержимого прокрутки, и когда я прокручиваю и увеличиваю масштаб, графика перерисовывается с соответствующим разрешением и выполняется точно так, как я ожидал.

Моя проблема заключается в том, что если я изменю значения, которые генерируют графический объект (это визуализация структуры, подобной графику), тогда setNeedsDisplay в представлении, изменения будут применяться и отображаться на некоторых уровнях масштабирования, но если вы Уменьшите его, показывая старый графический объект, который был сгенерирован. Масштабирование снова возвращается к правильной графике.

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

Мой вопрос в том, есть ли способ заставить CATiledLayer перерисовывать не из кэшированных данных? А если нет, кто-нибудь знает, что может вызвать проблему?

ответ

0

Не уверен, что у вас все еще есть эта проблема, но я столкнулся с ней сам недавно. Это похоже на ту же проблему из Clear CATiledLayers Cache When Changing Images. Кажется, ответ заключается в том, чтобы установить layer.content в nil, а затем вызвать обновление с помощью setNeedsDisplay или setNeedsDisplayInRect :. Так что, где бы вы назвали бы setNeedsDisplay, чтобы обновить вид после желая прояснился бы вы вместо этого использовать:

layer.content = nil; 
[layer setNeedsDisplay]; 

Это похоже на работу для меня, хотя в комментариях для ответа на выше связанный вопросе есть предупреждение в отношении непосредственно установив свойство layer.content. Помимо возможного удаления и повторного добавления слоя, хотя я не смог придумать другие варианты.

+0

Спасибо за подсказку, я больше не использую CATiledLayer, но отлично знаю будущие проекты. Я попробую :). –

Смежные вопросы