繁体   English   中英

CALayer-清除内部渲染上下文以支持自定义绘图代码

[英]CALayer - clear internal rendering context in favor of custom drawing code

当将CALayer子类化并实现drawInContext方法时,我假设在其中进行的所有绘图都会显示所有内容,但是相反,如果我设置(例如)borderWidth / borderColor,则CALayer首先将在其自身上绘制边框我的自定义绘图代码。

这是CALayer的子类:

@implementation MyCustomCALayer

 - (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
{
if(myLayer)
return;

  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方法,但是我看到的是一个红色的矩形,上面有一个绿色的边框,总是在顶部,我已经尝试过几乎可以想到的每种组合,以消除绘制的绿色边框并且无法弄清楚。

我的理由是,我想使用CALayer的borderWidth和borderColor和其他属性,而不是创建自己的属性,因为我需要绘制的代码包含边框,填充等,但是我需要渲染做的不是简单的形状。 因此,我发现的唯一方法是将borderWidth设置为0,并将自己的属性添加到我的子类中,例如myBorderWidth,这很荒谬。

这是使用最新的iOS SDK完成的,但我想Mac也是一样。

希望这有意义,有什么想法吗?

谢谢!

你不走运; CoreAnimation不支持为基本图层属性重写其渲染实现。 提交错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM