0

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

// 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);
4

2 回答 2

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 。

于 2013-02-01T15:37:34.027 回答
0

而不是做

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

尝试使用CGContextFillRect.

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

注意:你可以做

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

但这与仅仅填充一个矩形相比有点过分了。

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

于 2013-02-01T15:37:30.083 回答