2016-04-26 37 views
0

我用下面的代碼來捕捉整個屏幕的截圖,包括狀態欄和的TabBariOS9截圖沒有顯示的TabBar

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);  
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO]; 

UIImage *imageNew = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImageWriteToSavedPhotosAlbum(imageNew, nil, nil, nil); 

它吸引了一切,除了狀態欄和的TabBar

+0

我不知道什麼「自我」就在這裏,但我非常懷疑它包含狀態欄或標籤欄。它可能只是一個視圖控制器,因此self.view是視圖本身。 – Eiko

+0

'self.view'是指主視圖,不是嗎? – Maysam

+1

它指的是「自我」的觀點,無論如何。只有你知道。但它最有可能不是整個屏幕。 – Eiko

回答

0

嘗試下面的代碼。

CALayer *layer = [[UIApplication sharedApplication] keyWindow].layer; 
CGFloat scale = [UIScreen mainScreen].scale; 
UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, scale); 

[layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 

UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil); 

我測試我的應用程序,它需要的的TabBar截圖。

希望它適合你。

+0

不,我有幾個動態創建的圖層,如果我起訴這種方法,將不會顯示。 – Maysam

0

只有在每個UI組件被安置在viewDidAppear之後,才能調用屏幕截圖捕獲代碼塊。

-(void) viewDidAppear:(BOOL)animated { 

[super viewDidAppear:animated]; 

//Screen capturing code goes here... 

} 
+0

但我不想捕獲'viewDidAppear()'! – Maysam

+0

好的,那麼我們必須找到每個UI元素在控制器中可見的地方。 – byJeevan