2013-04-07 36 views
5

Tôi đang xây dựng một ứng dụng mà tôi cần chụp ảnh màn hình của chế độ xem có các phiên bản phụ là các phiên máy ảnh (các phiên AVFoundation). Tôi đã thử mã này:Chụp ảnh màn hình của một UIView nơi các phụ đề của nó là các phiên máy ảnh

CGRect rect = [self.containerView bounds]; 
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[self.containerView.layer renderInContext:context]; 
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

nào hiệu quả được cho tôi một UIImage với quan điểm, duy nhất mà các phiên camera có màu đen:

enter image description here

Tôi đã thử phương pháp riêng UIGetScreenImage() và hoạt động hoàn hảo, nhưng khi Apple không cho phép điều này, tôi không thể sử dụng nó. Tôi cũng đã thử một trong Apple's docs nhưng nó giống nhau. Tôi đã theo dõi vấn đề với các phiên AVFoundation bằng cách sử dụng các lớp. Làm thế nào tôi có thể đạt được điều này? Ứng dụng có chế độ xem vùng chứa với hai chế độ xem bị dừng phiên máy ảnh.

+0

Tôi cũng gặp vấn đề này một thời gian trước. Vấn đề là lớp xem trước máy ảnh (cũng như một số lớp hiển thị tùy chỉnh) đang sử dụng OpenGL. Phương pháp bạn đang sử dụng không hoạt động với các lớp được hỗ trợ GL khi tôi nhớ lại. Tôi sẽ hỏi xung quanh và xem điều này có đúng không. –

+0

@SteveMcFarlin bạn có tìm cách giải quyết vấn đề không, tôi đang gặp phải vấn đề tương tự http://stackoverflow.com/questions/41239254/take-screenshot-during-video-call-screenshot-for-uiview-with-camera -session-sub – Chlebta

+0

Bạn đã tìm thấy giải pháp? – Chlebta

Trả lời

2

Nếu đang sử dụng iOS 7, nó khá đơn giản và bạn có thể làm một cái gì đó như thế này từ một UIViewController:

UIView *snapshotView = [self.view snapshotViewAfterScreenUpdates:YES]; 

Bạn cũng có thể sử dụng liên kết này từ một góa phụ: iOS: what's the fastest, most performant way to make a screenshot programatically?

Đối với iOS 6 và trước đó , Tôi chỉ có thể tìm thấy Apple Technical sau đây Q & A: How do I take a screenshot of my app that contains both UIKit and Camera elements?

  1. Ghi lại nội dung của chế độ xem máy ảnh của bạn. (Explained here)
  2. Tự mình vẽ nội dung camera đã chụp vào ngữ cảnh đồ họa mà bạn đang hiển thị các phần tử UIKit của mình. (Tương tự như những gì bạn đã làm trong mã của mình)
+0

Tôi bối rối vì giải pháp này dường như không hoạt động nhưng nó đã được chọn. Tôi đã thử tất cả các loại biến thể của phương pháp này nhưng không may mắn. Nó vẫn còn màu đen. Điều này thực sự làm việc? – Vlad

+0

@Vlad Tôi đã thử và không hoạt động, bạn có tìm thấy giải pháp không? – Chlebta

0

Tôi cũng đang tìm kiếm giải pháp cho vấn đề này!

tôi hiện ra vào lúc này vì vậy tôi không thể kiểm tra những gì tôi đã tìm thấy, nhưng hãy nhìn vào những liên kết này:

Screenshots-A Legal Way To Get Screenshots có vẻ như nó đi đúng hướng - đây là Example Project (và here là bài viết đầu tiên)

Khi tôi quản lý để làm cho nó hoạt động, tôi chắc chắn sẽ cập nhật câu trả lời này!

+0

Tôi cũng đã nhìn thấy những bài viết đó, nhưng tôi không thể quản lý nó:/ – pmerino