2010-02-24 35 views
5

Tôi có một ứng dụng được đặt ra bằng cách sử dụng một UITableView. Giao diện chiếm nhiều hơn chỉ là màn hình, vì vậy có một số khu vực có thể được cuộn đến. Tôi muốn một số ảnh chụp màn hình của toàn bộ khung nhìn (bao gồm cả khu vực không nhìn thấy được) để sử dụng cho tài liệu và thu hút phản hồi từ khách hàng của tôi.Làm thế nào để chụp ảnh màn hình iPhone của toàn bộ màn hình bao gồm cả các bộ phận tắt màn hình?

Có cách nào có lập trình để có được hình ảnh của toàn bộ chế độ xem không? Tôi không nghĩ rằng sẽ có một cách trên thiết bị để làm điều này, nhưng có thể có.

Trả lời

6

Chỉ cần dán một số mã tôi đã sử dụng trong ứng dụng của mình. Nó đưa ra một cái nhìn cho một hình ảnh (có khả năng mở rộng quy mô). Có lẽ bạn programmaticaly có thể di chuyển bàn và khâu những hình ảnh lại với nhau vào cuối hoặc một cái gì đó tương tự:

+ (UIImage *)captureView: (UIView *)view inSize: (CGSize)size 
{ 
    UIGraphicsBeginImageContext(size); 
    CGSize viewSize = view.frame.size; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextScaleCTM(context, size.width/viewSize.width, size.height/viewSize.height); 

    [view.layer renderInContext: UIGraphicsGetCurrentContext()]; 

    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return viewImage; 
} 

Hy vọng nó giúp

+2

Yup, hoạt động như một nhà vô địch nếu thay vì làm cho nó mở rộng, bạn chỉ cần sử dụng kích thước của khung nhìn và khi tạo UITableView, bạn làm cho nó đủ cao cho tất cả các ô logic trong chế độ xem và chiều rộng tiêu chuẩn. – Bearddo

1

Với chế độ xem bảng trên iPhone, không có vùng "phụ" để cuộn đến. Chế độ xem bảng lớn bằng màn hình và khi các ô mới được cuộn vào chế độ xem, chúng được tạo theo yêu cầu, trong khi các ô cũ được cuộn ra khỏi màn hình được deallocated.

+0

Đã ghi đầy đủ, tuy nhiên điều đó không thực sự giải quyết vấn đề của tôi nhận được một ảnh chụp màn hình của toàn bộ giao diện (không có nhiều bức ảnh và sau đó splicing chúng lại với nhau). – Bearddo

+1

Anh ấy nói bạn nhận được ảnh chụp màn hình của toàn bộ giao diện. Các phần của màn hình tắt bàn chỉ là hợp lý. Họ không có biểu hiện trực quan nào cả. Một bảng không giống như một scrollview mà chỉ cho bạn thấy một phần của một cái nhìn lớn hơn. Với một cái bàn, những gì bạn thấy là những gì tồn tại. Mỗi khi bạn cuộn bảng, nó sẽ tự xây dựng lại. Cho đến khi bạn di chuyển đến vị trí tắt màn hình, vị trí đó không tồn tại trực quan. – TechZen

+0

@TechZen Vâng, tôi hiểu rằng nó xây dựng nó trên bay, những gì tôi muốn là một ảnh chụp màn hình của toàn bộ giao diện như thể tất cả các tế bào hợp lý đã được rút ra (với nhiều không gian như mất). – Bearddo

1

As Jasarien said, UITableView không có yếu tố tắt màn hình. Nó chỉ là một ảo tưởng sân khấu tạo ra sự xuất hiện của yếu tố dài duy nhất.

Nếu bạn muốn tạo hình ảnh dài (tức là màn hình ngoài), bạn should take screenshots of the table tại các vị trí cuộn khác nhau và sau đó Photoshop/GIMP/chèn đồ họa-ứng dụng ảnh chụp màn hình vào một hình ảnh dài.

4

Bạn thực sự có thể di chuyển các tableview. Đoạn mã sau hoạt động hoàn hảo trong ứng dụng của tôi. Nhưng nó có thể mất một màu trắng để làm cho ảnh chụp màn hình. Bạn có thể tham khảo this để xem có ai được cải thiện hay không.

//viewController is your UITableViewController 
UIGraphicsBeginImageContext(viewController.tableView.contentSize); 
[viewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
[viewController.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

int rows = [viewController.tableView numberOfRowsInSection:0]; 
int numberofRowsInView = 7; 
for (int i =0; i < rows/numberofRowsInView; i++) { 
    [viewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(i+1)*numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
    [viewController.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

} 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

cảm ơn bạn, nó hoạt động. – Alex

1

Chụp ảnh màn hình của quan điểm toàn bộ bảng và không chỉ các tế bào có thể nhìn thấy. Cách tiếp cận này không yêu cầu cuộn chế độ xem bảng và chụp nhiều ảnh chụp màn hình và đặt chúng lại với nhau.

Hoạt động tốt với chân trang và tiêu đề của chế độ xem bảng.

CGRect frame = _tableView.frame; 
frame.size.height = _tableView.contentSize.height;//the most important line 
_tableView.frame = frame; 

UIGraphicsBeginImageContext(_tableView.bounds.size); 
[_tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

NSData * data = UIImagePNGRepresentation(image); 
+0

Cách tiếp cận hoàn hảo. Điều này thay đổi chiều cao của khung của tableView trước khi chụp ảnh màn hình, vì vậy bạn không phải bận tâm với việc cuộn. Lưu ý bạn sẽ phải fiddle với chiều cao của khung nếu bạn có một thanh điều hướng có thể nhìn thấy. – Jeff

+0

Một chỉnh sửa: sau UIGraphicsEndImageContext() ;, bạn nên khôi phục khung tableView về khung hình ban đầu, hoặc di chuyển sẽ bị rối tung lên. – Jeff

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