我很困惑为什么我的应用程序崩溃了这个错误。
我已经实现了displayLayer方法(用于渲染CALayer)。 这个方法第一次运行时工作正常。但随后的调用是在发生错误时。
当self.bgColor设置为上下文填充颜色时,似乎会发生错误。 有趣的...如果我在那条线之前创建了bgColor,那么事情就会奏效。但就目前而言,bgColor是在初始化此类(displayLayer方法的容器)时创建的。
-(void)displayLayer:(CALayer *)caLayer
{
UIGraphicsBeginImageContext(caLayer.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, self.bgColor);
CGContextFillRect(context, CGRectMake(0, 0, 320, 25));
[self drawText:context];
// get image buffer
UIImage *imageBuffer = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// set layer contents to image buffer
caLayer.contents = (id)[imageBuffer CGImage];
}
答案 0 :(得分:5)
我还没有做过多少iPhone编程,也从未使用过CGColor实例变量,所以我会这样做:
@interface {
....
UIColor *bgColor;
....
}
@property (nonatomic, retain) UIColor *bgColor;
...
@end
@implementation
@synthesize bgColor;
- (id)init {
...
self.bgColor = [UIColor blackColor];
...
}
-(void)displayLayer:(CALayer *)caLayer {
...
CGContextSetFillColorWithColor(context, self.bgColor.CGColor);
...
}
...
@end
[UIColor blackColor]返回一个自动释放的对象,并将其分配给您的实例变量而不保留它。
在init中使用self.bgColor而不仅仅是bgColor并设置属性以保留其值将确保保留颜色并稍后可以在displayLayer中使用。
正如我所提到的,我没有直接使用CGColors的经验,这就是我在上面的代码中使用UIColor的原因。请根据需要进行调整。