2016-04-26 4 views
0

Я использую следующий код, чтобы захватить скриншот всего экрана, в том числе и статусной TabBar:iOS9 скриншот не показывает 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); 

Он втягивает все, кроме STATUSBAR и TabBar

+0

Я не знаю, что такое «я» именно здесь, но я очень сомневаюсь, что он содержит строку состояния или панель вкладок. Вероятно, это всего лишь контроллер вида, и, следовательно, self.view - это само представление. – Eiko

+0

'self.view' относится к основному виду, не так ли? – Maysam

+1

Это относится к мнению «я», что бы это ни было. Только вы знаете. Но это скорее всего не весь экран. – Eiko

ответ

0

Try ниже кода.

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

Только после того, как каждый компонент пользовательского интерфейса установлен на viewDidAppear, блок кода блокировки экрана вызова.

-(void) viewDidAppear:(BOOL)animated { 

[super viewDidAppear:animated]; 

//Screen capturing code goes here... 

} 
+0

Но я не хочу захватывать 'viewDidAppear()'! – Maysam

+0

Итак, мы должны найти место, где все элементы пользовательского интерфейса видны в контроллере. – byJeevan

Смежные вопросы