objective-c - CALayer - 清晰的内部渲染上下文有利于自定义绘图代码

标签 objective-c cocoa core-graphics calayer quartz-graphics

当子类化 CALayer 并实现 drawInContext 方法时,我会假设我在其中所做的任何绘图都会显示出来,但是如果我设置(例如)borderWidth/borderColor,那么 CALayer 将在其上绘制边框首先拥有我的自定义绘图代码。

这是 CALayer 子类:

@implementation MyCustomCALayer

<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 </code></pre>

在 UIView 中创建,例如:

- (void)ensureLayer<br/> {<br/> if(myLayer)<br/> return;

<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]; } </code></pre>

发生的情况是,MyCustomCALayer 用红色填充一个矩形,这是我期望看到的,没有其他内容,因为我已经实现了 drawInContext 方法,但我看到的是一个顶部有绿色边框的红色矩形,总是在最上面,我已经尝试了几乎所有我能想到的组合来摆脱正在绘制的绿色边框,但无法弄清楚。

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

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

希望这是有道理的,有什么想法吗?

谢谢!

最佳答案

你运气不好; CoreAnimation 不支持覆盖其基本图层属性的渲染实现。请做file a bug .

关于objective-c - CALayer - 清晰的内部渲染上下文有利于自定义绘图代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437878/

相关文章:

ios - 裁剪放置图片实现电池电量效果

objective-c - 合成的副本属性不会被 ARC 释放

objective-c - 对 Cocoa 应用程序和 Quartz Composer 中的 Movie Loader 补丁之间的绑定(bind)问题感到非常困惑

objective-c - Cocoa:向现有 GUI 应用程序添加命令行功能

ios - UITableViewCell 链接到 PageViewController 中的特定页面

objective-c - 了解应用程序在 cocoa mac OSX 中是否处于非事件状态的最佳方法?

ios - 如何使用 CoreGraphics iOS Cocos2d 制作 Sprite

ios - 如何在 UIView 中绘制透明度?

ios - 如何确定 CGImage 每个像素的组件数?

objective-c - 带有数组的核心数据获取请求