drawRect context错误

时间:2010-06-08 17:45:29

标签: objective-c iphone cgcontext

我听说很多人因不使用drawRect而导致上下文错误

现在我有了这个:

 - (void)drawRect:(CGRect)rect {  
  NSLog(@"drawRect: Starts");
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
  CGContextSetLineWidth(context, 3.0);
  CGContextMoveToPoint(context, lineStart.x, lineStart.y);
  CGContextAddLineToPoint(context, lineEnd.x, lineEnd.y);
  CGContextStrokePath(context); 
}

错误:

<Error>: CGContextSetRGBStrokeColor: invalid context

哪个曾在以前的程序中工作过,但在这个程序上却没有。有什么不同:我有一个视图控制器,它调用这个UIView:

-(void)createLine:(CGPoint)start:(CGPoint)end {
 NSLog(@"createLine: Starts");
 lineEnd = start;
 lineStart = end;
 self = [super initWithFrame:drawRect:CGRectMake(fmin(lineStart.x, lineEnd.x), fmin(lineStart.y, lineEnd.y), fabs(lineStart.x - lineEnd.x), fabs(lineStart.y - lineEnd.y))];
}

这是我的第一个问题,我不知道我应该把多少信息代码放在这里,所以对我来说很容易。

2 个答案:

答案 0 :(得分:1)

冒着明显的风险,当你没有有效的上下文时,看起来你正在调用createLine。这就是直接调用drawRect不是一个好主意的原因。 Intsead,请致电setNeedsDisplay并让系统在合适的时间拨打drawRect

答案 1 :(得分:0)

正如walkytalky所写,你不应该直接打电话给drawRect。如果您需要确保触发对drawRect的调用,请拨打setNeedsDisplay,这将确保在适当的时间调用drawRect

createLine::方法的最后一行有点令人困惑和非正统。我认为,为了您的目的,您要删除该行,只需将其替换为setNeedsDisplay的全部。这应该触发使用新的lineStart和lineEnd值调用drawRect