2009-04-25 23 views
22

Tôi có một số UIView có hình ảnh và một số nút làm phần phụ của nó. Tôi muốn có hình ảnh "chụp nhanh" bằng cách sử dụng renderInContext hoặc phương pháp khác.Hiển thị UIView với các con của nó

[clefView.layer renderInContext:mainViewContentContext]; 

Nếu tôi chuyển nó UIView (như trên) thì tôi nhận được một bitmap trống. Không có đứa trẻ nào được đưa vào bitmap.

Nếu tôi chuyển cho nó chế độ xem con là hình ảnh, sau đó tôi nhận được hình ảnh của bitmap đó, và, không ngạc nhiên, không có anh chị em nào của nó (nút).

Tôi đã hy vọng rằng renderInContext sẽ chụp ảnh và tất cả trẻ em có thể nhìn thấy và hiển thị nó thành một bitmap. Có ai có bất kỳ ý tưởng làm thế nào để làm điều này?

Trả lời

35

Hãy thử một cái gì đó như thế này:

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

Cảm ơn, nhưng điều đó không làm được. Tôi nhận được kết quả tương tự. Vấn đề, tôi nghĩ rằng, renderInContext không phải là đi qua các subviews và chỉ làm lớp trên cùng được truyền cho nó (mặc dù những gì tôi nghĩ rằng nó phải làm). Tôi có phải gọi hàm renderInContext cho mỗi chế độ xem phụ không? – mahboudz

+0

Ok, chơi với nó nhiều hơn một chút và đây là câu trả lời đúng. My ImageContext đã được đặt thành chế độ xem anh chị em không phải là người giám sát. Cảm ơn! – mahboudz

+0

Điều này hoạt động tốt hơn nhiều so với bất kỳ phương pháp nào khác mà tôi đã gặp phải. – freespace

0

Phiên bản 4 dòng đơn giản không làm việc cho tôi. Tôi có một UIView (với sublayers), và một UITextView con. Tôi có thể hiển thị UIView vào UIImage OK, nhưng UITextView con không được trả về.

giải pháp đơn giản của tôi là như sau:

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(); 

Lưu ý rằng việc sử dụng đơn giản của CGContextTranslateCTM giả định quan điểm trẻ em đã không chuyển đổi khác so với bản dịch. Ngoài ra, tôi giả định rằng các khung nhìn con được chứa hoàn toàn trong khung nhìn cha.

Các vấn đề liên quan