2011-01-10 4 views
0

CGBitmapContextCreate 호출을 사용하여 내 자신의 컨텍스트를 만듭니다. 컨텍스트가 성공적으로 만들어집니다. 이 컨텍스트에서 CGContextDrawImage를 성공적으로 호출하여 UIImage를 그릴 수 있습니다. 하지만, 내가 drawPatternInRect : UIImage의 호출을 사용하려고하면 'Context is nil'오류가 발생합니다.UIImage의 drawPatternInRect :가 Views 컨텍스트에서만 작동하는 이유

CGContextDrawImage가 동일한 컨텍스트에서 올바르게 작동하기 때문에 컨텍스트가 nil이 아니며 올바르게 작성되었다고 확신합니다. drawPatternInRect : 호출은 컨텍스트가 UIView이거나 UIView의 drawRect 메서드에서 컨텍스트를 만드는 경우에만 제대로 작동합니다. 하지만, 나는이 문맥에서 UIImage를 생성해야하기 때문에 UIView의 컨텍스트를 사용할 수 없습니다.

여기에서 문제가 무엇인지 또는 drawPatternInRect에 대한 다른 대체 간단한 방법을 아는 사람이 있습니까?

답변

0

코코아의 그래픽 컨텍스트와 관련된 추가 개념이 있습니다. Core Graphics에는 모든 CG 드로잉 호출에 명시적인 매개 변수로 전달되어야하는 CGContextRef가 있습니다. iOS의 다른 많은 장소에는 현재 드로잉 호출에 대한 암묵적인 매개 변수로 전역 컨텍스트 (각 스레드에 대해 전역) 인 현재 컨텍스트 개념이 있습니다. UIImage를 비롯한 많은 API가 현재 상황에서 사용됩니다. UIGraphics.h 헤더를 참조하십시오.

일반적으로 drawRect :가 호출되기 전에 현재 컨텍스트가 뷰 시스템에 의해 설정되므로이 경우 드로잉이 작동하는 것 같습니다. 컨텍스트를 직접 작성한 경우 현재 컨텍스트를 명시 적으로 설정해야합니다. 맥 것들에

UIGraphicsPushContext(yourCGContext); 

// Do your drawing here 

UIGraphicsPopContext(); 

유사한 사용 NSGraphics 컨텍스트입니다 NSGraphicsContext 애플의 설명서를 참조하십시오 :이 코드는 당신을 위해 작동합니다.

NSGraphicsContext* nsGraphicsContext = [ NSGraphicsContext 
     graphicsContextWithGraphicsPort: yourCGContext flipped: NO ]; 
[ NSGraphicsContext saveGraphicsState ]; 
[ NSGraphicsContext setCurrentContext: nsGraphicsContext ]; 

// Do your drawing here 

[ NSGraphicsContext restoreGraphicsState ];