2010-02-24 73 views
5

我有一個使用UITableView進行佈局的應用程序。界面佔用的不僅僅是屏幕,所以有一些區域可以滾動到。我希望整個視圖的截圖(包括不可見區域)用於文檔和徵求來自我的客戶的反饋。如何拍攝包括部分屏幕在內的整個視圖的iPhone屏幕截圖?

是否有程序化的方式來獲取整個視圖的圖像?我不認爲設備上有這樣做的方法,但也許有。

回答

6

只是粘貼我在我的應用程序中使用的一些代碼。它爲圖像繪製視圖(可能縮放)。 也許你可以programmaticaly滾動表並在年底或類似的東西拼接圖像:

+ (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; 
} 

希望它可以幫助

+2

是的,像一個冠軍一樣工作,如果不是縮放,你只需使用視圖的大小,並且在創建UITableView時,視圖中的所有邏輯單元格和標準寬度都足夠高。 – Bearddo 2010-02-25 03:58:24

1

通過iPhone上的表格視圖,沒有「額外」區域可以滾動到。表格視圖與屏幕一樣大,當新的單元格滾動到視圖中時,它們按需創建,而在屏幕上滾動的舊單元格將被釋放。

+0

適當注意,並沒有真正解決我讓整個界面的截圖(沒有多個照片,然後拼接在一起)的問題。 – Bearddo 2010-02-24 18:13:39

+1

他說你得到了整個界面的截圖。桌子外面的部分是合乎邏輯的。他們根本沒有視覺表現。一張表不像一個滾動視圖,它只是向你展示一個大視圖的一部分。用桌子,你看到的是存在的東西。每當你滾動表格時,它都會重建自己。在滾動到屏幕外的位置之前,該位置不會以視覺方式存在。 – TechZen 2010-02-24 18:16:44

+0

@ TechZen是的,我明白它是動態構建的,我想要的是整個界面的屏幕截圖,就好像所有的邏輯單元都被繪製了一樣(所需的空間足夠多)。 – Bearddo 2010-02-24 18:22:49

1

As Jasarien said,UITableView沒有關閉屏幕元素。這只是一個階段幻覺,創造了單一長元素的外觀。

如果你想創建一個長的(即離屏)表的圖像,你在不同的滾動位置你should take screenshots of the table,然後Photoshop/GIMP/insert-graphics-app截圖到一個長圖形。

4

實際上,你可以滾動的tableview。以下代碼適用於我的應用程序。 但是製作屏幕截圖可能需要白色。你可以參考this看看是否有人改進。

//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

謝謝,它的工作原理。 – Alex 2013-06-17 17:12:55

1

取整表視圖的截圖,而不僅僅是可見單元格。這種方法不需要滾動表格視圖並截取許多截圖並將它們放在一起。

適用於表格頁腳和頁眉。然而

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

完美的做法。這會在截取屏幕截圖之前更改tableView框架的高度,所以您不必擔心滾動。請注意,如果您可以看到導航欄,則必須擺弄框架的高度。 – Jeff 2014-12-05 06:58:38

+0

One edit:在UIGraphicsEndImageContext()之後,您應該將tableView框架恢復到最初的狀態,否則滾動將會混亂。 – Jeff 2014-12-05 07:20:03