2010-05-13 4 views
9

도구 모음과 스냅 샷을 찍기위한 사용자 지정 단추를 사용하여 UIImagePicker/카메라보기를 만들었습니다. 나는 커스텀 버튼으로 인해 디폴트 방식을 사용하는 것으로 바꿀 수 없으며, 뷰의 꼭대기에 그림을 그려 놓았다.다음 실행 루프 대신 UIView를 즉시 다시 그리기.

단추를 누르면 UIGetScreenImage()를 사용하여 스크린 샷을 찍고 싶습니다. 그러나, 도구 모음은 내가 처음 그것을 숨길 경우에도 이미지에 표시됩니다 :

//hide the toolbar 
self.toolbar.hidden = YES; 

// capture the screen pixels 
CGImageRef screenCap = UIGetScreenImage(); 

나는 도구 모음이 숨겨진 경우에도,이 함수가 반환되면 다시 그려됩니다 때문입니다 확신 우리가 입력 다음 실행 루프 - UIGetScreenImage가 호출 된 후

나는 다음과 같은 추가을 시도했지만 도움이되지 않았다

//hide the toolbar 
self.toolbar.hidden = YES; 
[self.toolbar drawRect:CGRectMake(0, 0, 320, 52)]; 

// capture the screen pixels 
CGImageRef screenCap = UIGetScreenImage(); 

가 나는 또한 setNeedsDisplay를 사용했지만, 그래도 문제가 해결되지 중 하나를 다시 한 번 무승부는 현재 함수가 반환 한 후에 발생하기 때문이다.

제안 사항? 감사!

답변

3

인수에 YES을 사용하여 -performSelectorOnMainThread:withObject:waitUntilDone: 메서드를 사용하여 UI 요소를 숨기십시오. 그런 다음 화면 캡처를위한 다른 선택기를 따라하십시오.

+0

이것은 혼자 였지만 약간의 추가로 효과가있었습니다. 나는 스크린 샷 선택기를 [self performSelector : @selector (captureScreen) withObject : nil afterDelay : 0];라고 불렀다. 그 일은 끝났어. 리드 주셔서 감사합니다! –

+0

[self performSelector : @selector (captureScreen) withObject : nil afterDelay : 0]; 실제로 "captureScreen"은 다음 실행 루프에서 실행됩니다. –

8

업데이트는 실행 루프에서 수행됩니다.

간단히 추가

self.toolbar.hidden = YES;

[[NSRunLoop currentRunLoop] runUntilDate : [NSDate dateWithTimeIntervalSinceNow : 0.01]];

CGImageRef screenCap = UIGetScreenImage();

+0

이것은 작업을 수행하고 구현하기가 더 쉽습니다. Antoine에게 감사드립니다. –