2010-06-08 9 views
0

나는 지금이있는 많은 사람들이 의 drawRect 컨텍스트 오류

의 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))]; 
} 

이 내 첫 번째 질문, 그리고 내가 여기 퍼팅해야 많은 정보를 원하시면 코드가 너무 날 쉬운 방법을 잘 모르겠습니다.

답변

1

확실한 진술을하지 않을 경우 유효한 문맥이 없을 때 createLine라고 전화하는 것처럼 보입니다. 그렇기 때문에 drawRect으로 직접 전화하는 것은 좋지 않습니다. Intead에서는 setNeedsDisplay으로 전화를 걸어 적절한 시간에 시스템에 drawRect을 호출하게합니다.

0

walkytalky가 쓴대로 drawRect으로 직접 전화하지 않아야합니다. drawRect에 대한 호출이 트리거되는지 확인하려면 setNeedsDisplay으로 전화하여 적절한 시간에 drawRect이 호출되는지 확인하십시오.

createLine:: 방법의 마지막 줄은 다소 혼란스럽고 정통합니다. 귀하의 목적에 맞게 해당 줄을 삭제하고 모두를 setNeedsDisplay으로 바꾸기를 원한다고 생각합니다. 그러면 새 lineStart 및 lineEnd 값을 사용하여 drawRect을 호출해야합니다.