2012-09-11 1 views
0

제목 호출이 작동하는 데 문제가 있습니다. 아래 테스트는 주황색 2 개와 녹색 1 개를 그려야합니다. 여기 UIGraphicsPushContext (aContext) 및 UIGraphicsPopContext() 작업

  • 은 내가
  • 내가 밀어 현재 컨텍스트를 전송, 200200에서 무승부 greenRect 전화 50,50
  • 에 주황색 사각형을 그립니다 ... 아래 코드에 대한 이해입니다 스택의 현재 컨텍스트, 획 색상을 변경하고 녹색 직사각형을 그립니다. 10000100
  • 원래 컨텍스트 (오렌지색 획 색상)를 복원해야하는 현재 컨텍스트를 팝합니다.
  • 마지막으로 사각형 오렌지

마지막 사각형을 쓰다듬어해야하는해야 스트로크 오렌지,하지만, 녹색 쓰다듬어 나는 원본 문장

생각을 수정 내게 말하고있다?

- (void)drawRect:(CGRect)rect{ 

CGRect aRectangle=CGRectMake(50., 50., 40., 40.); 
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle]; 
UIColor *strokeColor=[UIColor orangeColor]; 
[strokeColor setStroke]; 
[path stroke]; 

CGContextRef context=UIGraphicsGetCurrentContext(); 

[self drawGreenRect:context]; 

CGRect anotherRectangle=CGRectMake(100., 100., 40., 40.); 
UIBezierPath *anotherPath=[UIBezierPath bezierPathWithRect:anotherRectangle]; 
[anotherPath stroke]; 

}

- (void)drawGreenRect:(CGContextRef)ctxt{ 

UIGraphicsPushContext(UIGraphicsGetCurrentContext()); 

CGRect aRectangle=CGRectMake(200., 200., 40., 40.); 
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle]; 
UIColor *strokeColor=[UIColor greenColor]; 
[strokeColor setStroke]; 
[path stroke]; 

UIGraphicsPopContext(); 

}

답변

1

UIGraphicsPushContext() 당신을위한 새로운 컨텍스트를 만들지 않습니다, 그것은 단지 당신이 스택에 전달하는 컨텍스트를 푸시합니다. 따라서 UIGraphicsPushContext(UIGraphicsGetCurrentContext());을 수행 한 후에는 그래픽 컨텍스트 스택이 두 가지가 있지만 두 항목 모두 컨텍스트입니다. 컨텍스트는 사용자가보기로 설정 한 컨텍스트입니다.

실제로는 푸시 할 컨텍스트를 생성해야합니다. 대부분 UIGraphicsBeginImageContext()을 사용하는 것이 좋습니다. 그런 다음 해당 컨텍스트에서 이미지를 가져 와서 뷰에 넣을 수 있습니다.

+0

애플 문서에 따르면 UIGraphicsPushContext는 지정된 그래픽 컨텍스트를 현재 컨텍스트로 만듭니다. 이 함수를 사용하여 이전 그래픽 상태를 저장하고 지정된 컨텍스트를 현재 컨텍스트로 만들 수 있습니다. 이 함수에 대한 호출과 UIGraphicsPopContext 함수에 대한 호출의 균형을 조정해야합니다. 응용 프로그램의 메인 스레드에서만이 함수를 호출해야합니다. 이 함수를 사용하여 그래픽 컨텍스트를 저장하려면 어떻게합니까? – suhrmesa