2012-07-02 3 views
0

Objective-C에서 NSRect를 사용하여 드로잉을 시도하고 있지만 온라인 결과를 보면 출력 로그에 경고가 표시됩니다. 보기에 그려 지지만 디버거에서보고 한 문제는 없습니다.컨텍스트가없는 NSRectFill은 디버그 경고를 발생시킵니다.

나는 당신이 명시 적으로 그린 ​​것들은 "문맥"안에 있어야한다는 것을 읽었지 만, 내가 발견 한 모든 기사는 현재 내 수준보다 높습니다. 나는 이러한 오류를 얻을

- (void)drawRect:(NSRect)rect 
{ 
    NSColor *white = [NSColor whiteColor]; 
    NSColor *blue = [NSColor blueColor]; 

    [white set]; 
    NSRectFill([self bounds]); 

    rect = NSMakeRect(100, 100, 50, 50); 
    [blue set]; 
    NSRectFill(rect); 
} 

: 여기

내 코드의

7월 2일 16시 10분 49초 로컬 호스트 X를 [27220] : CGContextSetFillColorWithColor : 유효하지 않은 컨텍스트 0x0으로

7월 2일 16:10:49 localhost X [27220] : CGContextSetStrokeColorWithColor : 유효하지 않은 컨텍스트 0x0

7 월 2 일 16:10:49 localh OST의 X [27,220] : CGContextSetFillColorWithColor 잘못된 상황이 0x0

7 월를 2 16시 10분 49초 로컬 호스트 X [27,220] : CGContextSetStrokeColorWithColor 잘못된 상황이 0x0

7 월를 2 16시 10분 49초 로컬 호스트 X [27,220] : CGContextGetCompositeOperation 잘못된 상황이 0x0

7 월를 2 16시 10분 49초 로컬 호스트 X [27,220] : CGContextSetCompositeOperation 잘못된 상황이 0x0

7 월를 2 16시 10분 49초 로컬 호스트 X [27,220] : CGContextFillRects 잘못된 상황이 0x0

7월 2일 16시 10분 49초 로컬 호스트 X [27220] : CGContextSetCompositeOperation : 유효하지 않은 컨텍스트 0x0으로는

대부분의 기사는 "NSGraphicsContext"를 사용하는 방법에 대해 이야기하지만, 모든 이론이었고, 나는 얻는 방법의 예를 찾을 수 없습니다 그 일을.

나는 누군가가 드로잉 작업을 수행 할 때, 당신은 그래픽 컨텍스트를 제공해야합니다 :)

+0

CGContextRef ctx = UIGraphicsGetCurrentContext(); 메서드의 시작 부분에이 줄을 추가하십시오. –

답변

2

도울 수 있기를 바랍니다. 컨텍스트는 그림을 그리기위한 캔버스처럼 그림이 나타날 장소입니다.

그래픽 컨텍스트는 클래스 NSGraphicsContext의 인스턴스 또는 해당 CoreGraphics 하위 수준 상대 CGContextRef에 의해 관리됩니다. 대부분의 코코아 그리기 방법은 현재 상황에서 작동합니다. 그리기 작업에 대한 사용자 지정 컨텍스트를 만들려면 +[NSGraphicsContext currentContext]을 사용하여 현재 컨텍스트를 가져오고 +[NSGraphicsContext setCurrentContext:]을 사용하여 설정합니다.

그러나 -[NSView drawRect:]을 구현하면 은 그래픽 컨텍스트을 다룰 필요가 없습니다. 왜? NSViewdrawRect: 구현을 호출하기 전에 자동으로 컨텍스트를 만들고 현재 컨텍스트로 설정하므로 그려진 내용을 검색하여 화면에 표시합니다. 분명한주의 사항은 입니다. drawRect:을 직접으로 불러서는 안됩니다. 대신보기를 표시해야 할 때 코코아가 drawRect: 구현을 호출합니다. 자동으로 완료됩니다. 수행 할 수있는 유일한 작업 (즉, 수행해야 할 작업)은 다시 표시해야 할 시점을 알려주는 것입니다 (예 :매개 변수 YES과 함께 -[NSView setNeedsDisplay:] 메서드를 사용하여 그려진 내용이 변경된 경우).

+0

+1 당신은 drawRect :를 직접 호출하면 안됩니다 : 직접적으로 - 대부분 OP가 drawRect를 호출하여 오류를 얻었으며 드로잉주기에 자연스럽게 호출되기 때문에 모두 화면에 표시됩니다. – jrturton

관련 문제