绘制矩形的问题

时间:2011-04-16 15:47:45

标签: iphone xcode ios4

我在viewLoad中使用下面的代码(我不想在- (void)drawRect:(CGRect)rect中绘制)在视图上添加rect但是不起作用。为什么?

CGRect rect=CGRectMake(10,10,150,140);
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetStrokeColor(context, red);
CGContextBeginPath(context);
CGContextMoveToPoint(context, 10, 10);
CGContextAddRect(context, rect);
CGContextStrokePath(context);

2 个答案:

答案 0 :(得分:6)

您只能在拥有绘图上下文时绘制。您可以在任何想要创建图像的位置创建图像上下文,也可以在drawRect:内绘制以绘制到视图中。您不应该在drawRect:之外绘制您的视图。

看起来你可能看到了一个上下文,但实际上你不是UIGraphicsGetCurrentContext() returns nil outside of drawRect:(或者更正确:它只返回drawRect:内的上下文或者你是否自己创建并推送了一个图像上下文。)

答案 1 :(得分:3)

当没有当前上下文时,

UIGraphicsGetCurrentContext()将返回nil。在调用drawRect:之前为您创建一个上下文;如果您想手动创建上下文,请使用UIGraphicsBeginImageContextUIGraphicsBeginImageContextWithOptions启动上下文,UIGraphicsGetImageFromCurrentImageContext()以提取UIImage,并UIGraphicsEndImageContext()完成后再发布上下文。有关详细信息,请参阅the documentation

当然,你也可以创建一个CGBitmapContextRef并直接使用CoreGraphics调用而不是UIKit调用。每种方法都有优缺点,主要区别在于默认的转换矩阵。