1

我试图画一条线。

我写了如下代码。

UIColor *currentColor = [UIColor blackColor];

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGContextMoveToPoint(context, startingPoint.x, startingPoint.y);
CGContextAddLineToPoint(context,endingPoint.x , endingPoint.y);
CGContextStrokePath(context);

但这显示异常如下

Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetLineWidth: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextMoveToPoint: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextAddLineToPoint: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextDrawPath: invalid context 0x0
4

2 回答 2

4

您还需要在打电话CGContextBeginPath(ctx);之前打电话CGContextMoveToPoint

- (void) drawRect: (CGRect) rect
{
  UIColor *currentColor = [UIColor blackColor];

  CGContextRef context = UIGraphicsGetCurrentContext(); 
  CGContextSetLineWidth(context, 2.0);
  CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
  CGContextBeginPath(context); // <---- this 
  CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
  CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y);
  CGContextStrokePath(context);
}
于 2010-08-28T07:20:58.127 回答
2

您没有有效的图形上下文。UIGraphicsGetCurrentContext()显然回来了nil

你想画到哪里?

如果要在屏幕上绘图,则应实现其子类或其子类之一的drawRect:方法,并让 iOS 调用该方法(通过触发部分屏幕的刷新)。UIView然后在执行drawRect:.

如果要绘制到屏幕外像素图,则必须自己使用UIGraphicsBeginImageContext或类似功能创建图形上下文。

编辑:

因此,要绘制到UIView中,您需要创建一个UIView子类并覆盖drawRect:

@interfaceMyView : UIView {
}

@end


@implementation MyUIView

- (void) drawRect: (CGRect) rect
{
  UIColor *currentColor = [UIColor blackColor];

  CGContextRef context = UIGraphicsGetCurrentContext(); 
  CGContextSetLineWidth(context, 2.0);
  CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
  CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
  CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y);
  CGContextStrokePath(context);
}

然后打开 XIB 文件(您可能已经在 Interface Builder 中添加了一个UIView并选择 MyUIView 作为类(Inspector 窗口中最后一个选项卡上的第一个字段)。

于 2010-08-21T17:58:26.773 回答