尝试使用UIBezierPath绘制时收到错误

时间:2010-10-02 18:37:53

标签: iphone cocoa-touch ipad uiview ios4

我正在尝试在自定义UIView中绘制一些行。

从我所看到的,为了节省使用CoreGraphics的麻烦,我可以使用UIBezierPath(我在Mac上与NSBezierPath类似)。 我有一些代码试图绘制线但我得到输出错误,并找不到一个体面的参考与一些示例代码来说明发生了什么,任何想法? 代码如下......

代码:

  - (void)drawRect:(CGRect)rect {
    // Drawing code
    UIBezierPath *line1 = [UIBezierPath bezierPath];
 [[UIColor blackColor] setStroke];
 [line1 setLineWidth:3];
 [line1 moveToPoint:CGPointMake(0, 0)];
 [line1 addLineToPoint:CGPointMake(320, 480)];
 [line1 stroke];

}

错误:

Sat Oct  2 19:26:43 mercury.config mobileManual[46994] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0

更新:这是当前的代码,没有错误但也没有绘图......想法?

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor yellowColor]];
    [self.view setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context);
    UIBezierPath *line1 = [UIBezierPath bezierPath];
    [line1 setLineWidth:3];
    [line1 moveToPoint:CGPointMake(0, 0)];
    [line1 addLineToPoint:CGPointMake(320, 480)];
    [line1 stroke];
    CGContextRestoreGState(context);
}

2 个答案:

答案 0 :(得分:2)

就像我上面说的那样,你的代码对我来说很好。

您是否正在将Interface Builder中视图的“类标识”更改为您的UIView子类?

(顺便说一下,在viewDidLoad中调用setNeedsDisplay是不必要的,但它也没有伤害任何东西。)

答案 1 :(得分:1)

您的图形上下文无效。这是因为:

  • 您自己致电 drawRect:。永远不要那样做。请改为调用 setNeedsDisplay 并让iOS调用它。
  • 你以某种方式破坏了当前的图形环境(不太可能)。