开发者

drawRect context Error

开发者 https://www.devze.com 2023-01-02 13:56 出处:网络
I heard that a lot of people get a context error by not using drawRect Now I have this: - (void)drawRect:(CGRect)rect {

I heard that a lot of people get a context error by not using drawRect

Now I have this:

 - (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:

<Error>: CGContextSetRGBStrokeColor: invalid context

Which had work on previous programs, but not on this one. Whats different: I have a view controller, which calls thi开发者_如何学Gos 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))];
}

This is my first question, and I am not sure how much info code I should be putting here so be easy on me.


At the risk of stating the obvious, it looks like you're calling createLine sometime when you don't have a valid context. This is why it's not a good idea to call drawRect directly. Intsead, call setNeedsDisplay and let the system call drawRect at a suitable time.


As walkytalky wrote, you should not call drawRect directly. If you need to make sure that a call to drawRect is triggered, then call setNeedsDisplay, which will make sure that drawRect is called at the appropriate time.

The last line of your createLine:: method is a bit confusing and unorthodox. I think that for your purposes that you want to delete that line and simply replace it with a all to setNeedsDisplay. That should trigger a call to drawRect with the new lineStart and lineEnd values.

0

精彩评论

暂无评论...
验证码 换一张
取 消