CATiledLayer, очищающий мозаики прежде, чем потянуть содержание

Все,

Я испытываю затруднения при получении поведения, которое я хочу от CATiledLayer. Существует ли способ, которым я могу инициировать мозаики для перерисовки, не имея побочного эффекта, что их области очищены белому сначала? Я уже разделил CATiledLayer на подклассы для установки fadeDuration для возврата 0.

Чтобы быть точнее, вот детали того, что я вижу и чего я пытаюсь достигнуть:

  • У меня есть UIScrollView с большим размером содержания... ~12000x800. Довольный представление является UIView, поддержанным CATiledLayer.
  • UIView представляется с большим количеством пользовательски оттянутых строк
  • Все хорошо работает, но содержание UIView иногда изменяется. Когда это происходит, я хотел бы перерисовать мозаики максимально беспрепятственно. Когда я использую setNeedsDisplay на представлении, перерисовка мозаик, но они сначала очищены белому и существует задержка fraction-of-a-second, прежде чем новое содержание будет оттянуто. Я уже разделил CATiledLayer на подклассы так, чтобы fadeDuration был установлен на 0.
  • Поведение, которое я хочу, кажется, что должно быть возможно..., когда Вы увеличиваете масштаб scrollview, и содержание перерисовывается в более высоком разрешении, перед перерисовкой нет никакого очищения; новое содержание оттянуто прямо сверху старого. Это - то, что я ищу.

Спасибо; Я ценю Ваши идеи.

Обновление:

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

Как быстрое взламывают/устраняют, я поместил UIImageView под UIScrollView, и прежде, чем инициировать перерисовку CATiledLayer-поддержанного представления, я представляю его видимый раздел в UIImageView и позволяю ему показать. Это значительно сглаживает перерисовку.

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

12
задан David Rönnqvist 31 May 2012 в 21:14
поделиться

3 ответа

Вы можете добавить другой слой (возможно, катиледер) за существующим плиткой. (Вроде двойного буферизованного раствора.) Вы бы назвали setneedsdisplay: на втором слое от таймера, который пожали через несколько секунд, чтобы убедиться, что этот слой не перерезается в то же время, что и спереди слой.

1
ответ дан 2 December 2019 в 23:20
поделиться

Другой потенциальный вариант - использовать того же делегата для отрисовки содержимого в контекст растрового изображения и замены растрового изображения в резервное хранилище после обновления содержимого. Это должно дать результат без мерцания. При этом я не могу сказать вам, как это можно сделать, и одна хорошая вещь в CATiledLayers заключается в том, что они автоматически генерируют плитки при масштабировании и предварительно генерируют плитки при панорамировании после увеличения.

Я хотел бы посмотреть, как вы реализовать ваше приложение. Я неделями искал пример, в котором используется комбинация UIScrollView и CATiledLayer-back view с множеством настраиваемых нарисованных линий. У Apple есть отличный пример кода, но все он включает в себя изображения, а не штриховые рисунки, поэтому мне это не поможет.

1
ответ дан 2 December 2019 в 23:20
поделиться

У меня была такая же проблема с iPad.

Решение оказалось проще, чем я думал, и намного проще, чем использование UIImageView для рендеринга дисплея перед перерисовкой ...:

Просто не устанавливайте цвет фона для слоя!

Я установил CATiledLayer аналогичным образом:

layer = [[CATiledLayer alloc] init];
layer.masksToBounds = YES;
layer.contentsGravity = kCAGravityLeft;

//layer.backgroundColor = [[UIColor whiteColor] CGColor];

layer.tileSize = CGSizeMake(1004.0, 1004.0);
layer.levelsOfDetail = 16;
layer.levelsOfDetailBias = 8;

Обратите внимание, что я закомментировал цвет фона слоя, устанавливающего линию, на белый. После этого исчезла проблема с белой пробелой перед перерисовкой!

Дайте мне знать, если кто-нибудь пробовал это сделать.

0
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: