2012-06-30 5 views
3

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

У меня есть CATiledLayer, работающий аналогично примеру, который можно найти в документации по iOS, и я вычисляю, в какой строке и столбце drawRect:(CGRect) rect пытается нарисовать его содержимое.

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

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

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

У кого-нибудь есть идея, как этого достичь?

+0

есть слой, который загружает изображения с более низким качеством, является мастером и помещает верхний слой res сверху? – WolfLink

ответ

1

Я наконец-то понял это и спасибо за ключевой комментарий.

Что вы должны сделать:

  1. Создать подкласс CATiledLayer со всей динамической загрузки логики в функции drawLayer: InContext: - эта функция как DrawRect: в View
  2. Init вашего нового подклассы CATiledLayer
  3. Init новый CALayer с низким разрешением изображения
  4. Создать новый UIView * MyView = [UIView ...] или UIImageView (в зависимости от ваших потребностей)
  5. Поместите два слоя в Myvi ew.layer в качестве подслоя

UIView *imageView = [[UIView alloc] initWithFrame:viewFrame]; 

DCTiledLayer *tiledLayer = [[DCTiledLayer alloc] initWithData:myData]; 

CALayer *lowResLayer = [CALayer layer]; 
lowResLayer.position = CGPointMake(CGRectGetMidX(viewFrame), CGRectGetMidY(viewFrame)); 
lowResLayer.bounds = viewFrame; 
lowResLayer.contents = (id)[lowResImage CGImage]; 

[imageView.layer addSublayer:lowResLayer]; 
[imageView.layer addSublayer:tiledLayer]; 

Он работает как шарм. :)

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