1

我很困惑为什么我的应用程序因此错误而崩溃。

我已经实现了 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];
}
4

1 回答 1

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 的原因。请根据需要进行调整。

于 2009-09-28T01:54:05.593 回答