Фоновое изображение для CATiledLayer
Как вы, возможно, знаете, CATiledLayer
используется для отображения больших изображений, показывая мозаичные изображения в масштабе, подходящем для размера просмотра.
я имею CATiledLayer
работает аналогично примеру, который можно найти в документации iOS, и я рассчитываю, в какой строке и столбце drawRect:(CGRect)
rect пытается нарисовать его содержание.
Когда вид появляется в первый раз, он начинает рисовать плитку плиткой на пустом виде, не имея ничего позади этого вида / слоя. Я пытаюсь поместить изображение с низким разрешением, чтобы заполнить слой, а затем начать рисовать мозаичный вид.
Так же, как при перемещении по страницам PDF, каждая страница сначала представляется с очень плохим изображением, но этого достаточно, чтобы увидеть макет содержимого, и когда вы останавливаетесь на определенной странице, эта страница становится более четкой.
Я знаю, что могу добавить подслои поверх слоя catiled, но я не могу поместить слой позади слоя catiled, потому что это мастер-слой. Я также считаю, что важно загружать изображение для фона на том же слое, чтобы его можно было правильно масштабировать.
Кто-нибудь знает, как этого добиться?
1 ответ
Я наконец понял это и спасибо за ключевой комментарий.
Что ты должен сделать:
- Создайте подкласс CATiledLayer со всей логикой динамической загрузки внутри функции drawLayer:inContext: - эта функция похожа на drawRect: в представлении
- Инициируйте свой новый подкласс CATiledLayer
- Init new CALayer с изображением низкого разрешения
- Создайте новый UIView *myView = [UIView ...] или UIImageView (зависит от ваших потребностей)
- Поместите два слоя в myView.layer как subLayer
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];
Отлично работает.:)