Вопрос
Как создать отдельный контекст для своего слоя и включить этот контекст в суперслой?
Почему я хочу это сделать
Я хочу абстрагировать рисунок слоев представления в отдельные объекты/файлы. Я хочу построить представление из слоев, а затем расположить их друг над другом и иметь другие возможности.
Проблема в том, что я не знаю о том, что вы должны рисовать часть своего представления в слое без рисования прямо в контексте основного подслоя представлений.
Вот пример, я создал подкласс CALayer
с HFFoundation
:
@implementation HFFoundation
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
UIBezierPath *foundation = [UIBezierPath bezierPath];
// some drawing goes on here in the form of messages to [foundation]
}
@end
Теперь, когда я создаю экземпляр своего пользовательского слоя внутри представлений (void)drawRect:(CGRect)rect
, я делаю это следующим образом:
HFFoundation *foundation = [HFFoundation new];
foundation.frame = CGRectMake(40, viewHeight - 100, 300, 100);
foundation.backgroundColor = [[UIColor colorWithRed:1 green:.4 blue:1 alpha:0.2] CGColor];
[self.window.rootViewController.view.layer addSublayer:foundation];
Я получаю такой результат (рисунков не появляется, только цвет фона внутри рамки слоя):
Если я [foundation drawLayer:foundation inContext:context];
потом, рисунок появится, но он появится внутри контекста верхних слоев, а не в слое foundation
. Поскольку слой foundation
также находится ниже в иерархии, он скрывает рисунок (если я не уменьшу его альфу, чего нет на картинке):
Как вы рисуете в самом слое, т.е. foundation
в этом случае?