2011-04-10 96 views
5

我用它可以在任一方向使用,幷包含許多子視圖的一個UIScrollView工作:捕獲的UIScrollView關閉屏幕內容

// in viewDidLoad 

mainScrollView = (UIScrollView *)self.view; 

mainScrollView.contentSize = CGSizeMake(1024, 1432); 

我試圖捕捉整個滾動視圖的屏幕截圖包括其所有子視圖,包括當前在屏幕上不可見的內容。以下僅捕獲屏幕上顯示內容可見在捕獲時間:

// make screenshot 

UIGraphicsBeginImageContext(mainScrollView.bounds.size); 

[mainScrollView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *screenImg = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 



// save screenshot in docs dir 

NSData *pngData = UIImagePNGRepresentation(screenImg); 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSString *documentsDir = [paths objectAtIndex:0]; 

[pngData writeToFile:[documentsDir stringByAppendingPathComponent:@"screen1.png"] 

       options:NSDataWritingAtomic error:nil]; 

加入使得畫面拍攝前以下是我能罰款使我能夠捕獲整個滾動視圖的唯一途徑:

// capture off-screen content 

mainScrollView.frame = CGRectMake(0, 0, 1024, 1432); 

這個捕獲很好,包括所有子視圖。問題是,一旦我製作了屏幕截圖,我的滾動視圖變得無法響應,因此我無法再滾動(或在縱向模式下橫向移動)。如果我旋轉設備,問題似乎自行解決,我可以正常滾動和平移。 我敢肯定,我錯過了一些非常簡單的事情,這是讓屏幕截圖拍攝後我的滾動視圖正常工作所必需的。 任何建議非常感謝!

+0

我應該添加,以防萬一它是相關的,這是一個iPad應用程序。 – beev 2011-04-10 11:15:27

回答

3

問題是,您設置的框架大小等於內容大小。當幀大小等於或大於內容大小時,您將無法滾動。 您必須找到一種方法來確定屏幕截圖何時完成,並將框架大小更改爲以前的大小。所以:

CGRect oldFrame = mainScrollView.frame; 

// do your logic to screenshot 

mainScrollView.frame = oldFrame; 
+0

修復了它。非常感謝! – beev 2011-04-10 15:28:10