2009-04-25 5 views
22

UIView에는 이미지와 일부 버튼이 하위 뷰로 있습니다. 나는 renderInContext, 또는 다른 방법을 사용하여 그것의 "스냅 샷"이미지를 얻고 싶습니다. 나는 그것을 전달하는 경우그 자식이있는 UIView 렌더링

[clefView.layer renderInContext:mainViewContentContext]; 

내는 UIView (위와 같이) 나는 빈 비트 맵을 얻는다. 어떤 자식도 비트 맵으로 렌더링되지 않습니다.

이미지 인 하위 뷰를 전달하면 그 비트 맵 이미지를 얻게되며 놀랍게도 해당 형제 (버튼)는 표시되지 않습니다.

저는 renderInContext이 이미지를 가져 와서 모두 보이는 아이들이고 비트 맵으로 렌더링되기를 바랬습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 이 같은

답변

35

시도 뭔가 :

UIGraphicsBeginImageContext(clefView.bounds.size); 
[clefView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

감사합니다.하지만 그렇게하지 않았습니다. 나는 같은 결과를 얻는다. 내 생각에 문제는 renderInContext가 하위 뷰를 순회하지 않고 전달되는 최상위 레이어 만 처리한다는 것입니다. 각 하위 뷰에 대해 renderInContext를 호출해야합니까? – mahboudz

+0

좋아, 그걸 좀 더 연주하고 이것이 올바른 대답이다. 내 ImageContext가 수퍼 뷰가 아닌 형제 뷰로 설정되었습니다. 감사합니다. – mahboudz

+0

이것은 내가 만난 다른 어떤 방법보다 훨씬 효과적입니다. – freespace

0

간단한 4 줄 버전은 나를 위해 작동하지 않았다. 하위 뷰가있는 UIView 및 하위 UITextView가 있습니다. UIImage로 UIView를 렌더링 할 수 있지만 OK UITextView 자식은 렌더링되지 않습니다. 다음과 같이

내 간단한 해결책은 다음과 같습니다 CGContextTranslateCTM의 간단한 사용은 아이 뷰가 번역 이외의 변환에는 한지지 않습니다

CGRect rect = [view bounds]; 
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

[view.layer renderInContext:context]; 
for (UIView *sv in view.subviews) 
{ 
    CGContextTranslateCTM(context, sv.frame.origin.x, sv.frame.origin.y); 
    [sv.layer renderInContext:context]; 
    CGContextTranslateCTM(context, -sv.frame.origin.x, -sv.frame.origin.y); 
} 

UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

하는 것으로. 또한 하위 뷰가 상위 뷰 프레임 내에 완전히 포함되어 있다고 가정합니다.