石英2D绘图崩溃

时间:2013-02-01 15:33:28

标签: ios objective-c core-graphics quartz-2d

我不知道为什么这会停止工作,但是当我尝试绘制任何部分时,这段代码会崩溃我的设备。我是核心图形的新手,所以任何指针或建议都会有很大的帮助。谢谢!

// Style
CGContextRef context = UIGraphicsGetCurrentContext();

// Colors
CGColorRef fillBox = [UIColor colorWithRed:250.0/255.0 green:250.0/255.0 blue:250.0/255.0 alpha:1.0].CGColor;
CGColorRef fillBoxShadow = [UIColor colorWithRed:77.0/255.0 green:77.0/255.0 blue:77.0/255.0 alpha:1.0].CGColor;

CGRect box = CGRectMake(5, 5, self.frame.size.width - 10, self.frame.size.height - 10);
// Shadow
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 1.0, fillBoxShadow);
CGContextAddRect(context, box);
CGContextFillPath(context);
// Box
CGContextSetFillColorWithColor(context, fillBox);
CGContextAddRect(context, box);

CGContextFillPath(context);

2 个答案:

答案 0 :(得分:2)

如果您的项目使用ARC,那么这两行可能是您问题的一部分:

CGColorRef fillBox = [UIColor colorWithRed:250.0/255.0 green:250.0/255.0 blue:250.0/255.0 alpha:1.0].CGColor;
CGColorRef fillBoxShadow = [UIColor colorWithRed:77.0/255.0 green:77.0/255.0 blue:77.0/255.0 alpha:1.0].CGColor;

ARC正在释放UIColor对象,从而释放CGColorRef。您需要保留CGColorRef,然后在完成后将其释放。

我会写这样的代码:

UIColor *fillBox = [UIColor colorWithRed:250.0/255.0 green:250.0/255.0 blue:250.0/255.0 alpha:1.0];
UIColor *fillBoxShadow = [UIColor colorWithRed:77.0/255.0 green:77.0/255.0 blue:77.0/255.0 alpha:1.0];

然后在方法中使用fillBox.CGColor和fillBoxShadow.CGColor。

答案 1 :(得分:0)

而不是做

CGContextAddRect(context, box);
CGContextFillPath(context);

尝试使用CGContextFillRect

您无法事先填写尚未添加到上下文中的路径。

注意:你可以做到

CGContextAddPath(context, [UIBezierPath pathWithRect:box].CGPath);
CGContextFillPath(context);

但与填充矩形相比,这有点过分。

(不确定pathWithRect:语法,但它存在。)