При создании подкласса CALayer и реализации метода drawInContext я бы предположил, что любой чертеж, который я делаю внутри, есть все, что будет отображаться, но вместо этого, если я установлю (например) borderWidth / borderColor, тогда CALayer нарисует границупревыше всего мой пользовательский код рисования.
Это подкласс CALayer:
@implementation MyCustomCALayer </p>
<pre><code>- (id)init
{
self = [super init];
if(self)
{
[self setNeedsDisplayOnBoundsChange:YES];
}
return self;
}
- (void)drawInContext:(CGContextRef)context
{
CGRect rect = CGContextGetClipBoundingBox(context);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextFillRect(context, rect);
}
@end
Создано в UIView что-то вроде:
- (void)ensureLayer<br>
{<br>
if(myLayer)<br>
return; </p>
<pre><code> myLayer = [[[MyCustomCALayer alloc] init] autorelease];
myLayer.borderColor = [UIColor greenColor].CGColor;
myLayer.borderWidth = 1;
myLayer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
}
- (void)layoutSublayersOfLayer:(CALayer *)layer
{
[super layoutSublayersOfLayer:layer];
[self ensureLayer];
if(![[layer.sublayers objectAtIndex:0] isEqual:myLayer])
[layer insertSublayer:myLayer atIndex:0];
}
Что происходит, если MyCustomCALayer заполняет прямоугольник красным, этоэто то, что я ожидал увидеть, и ничего больше, поскольку я реализовал метод drawInContext, но вместо этого я вижу красный прямоугольник с зеленой рамкой сверху, всегда сверху, я пробовал практически все комбинации, которые могу придуматьчтобы избавиться от нарисованной зеленой границы и не могу ее понять.
Я считаю, что я хотел бы использовать borderWidth и borderColor и другие свойства CALayer вместо создания своего собственногосвойства, потому что код, который мне нужно нарисовать, содержит рамку, заливку и т. д., но рендеринг, который мне нужно сделать, не является простой формой.Таким образом, единственный способ, который я нашел для этого, - установить для borderWidth значение 0 и добавить свое собственное свойство в мой подкласс, например myBorderWidth, что нелепо.
Это сделано с помощью последней версии iOS SDK, но ямог бы представить, что то же самое для Mac.
Надеюсь, это имеет смысл, есть мысли?
Спасибо!