我想画一条线。
我写了如下代码。
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
答案 0 :(得分: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);
}
答案 1 :(得分:2)
您没有有效的图形上下文。 UIGraphicsGetCurrentContext()
显然已返回nil
。
你想在哪里画画?
如果你想绘制到屏幕,那么你应该实现drawRect:
或其子类之一的UIView
方法并让iOS调用该方法(通过触发刷新部分屏幕) )。然后,在执行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窗口中最后一个选项卡上的第一个字段)。