Как получить снимок экрана, когда контроллер представления представлен на другом контроллере представления?

Я хочу получить снимок экрана текущего экрана.

Но всякий раз, когда представлен MFMailComposeViewController или любой другой контроллер представлений, на скриншоте нет черного экрана.

//Code to draw what ever is present currently on the screen - (UIImage*)screenshot { CGSize imageSize = [[UIScreen mainScreen] bounds].size; if (NULL != UIGraphicsBeginImageContextWithOptions) UIGraphicsBeginImageContextWithOptions(imageSize,YES, 0.0); else UIGraphicsBeginImageContext(imageSize); CGContextRef context = UIGraphicsGetCurrentContext(); // Iterate over every window from back to front for (UIWindow *currentWindow in [[UIApplication sharedApplication] windows]) { if (![currentWindow respondsToSelector:@selector(screen)] || [currentWindow screen] == [UIScreen mainScreen]) { CGContextSaveGState(context); NSLog(@"current alpha %f", currentWindow.alpha); CGContextSetAlpha(context, currentWindow.alpha); // Center the context around the window's anchor point CGContextTranslateCTM(context, [currentWindow center].x, [currentWindow center].y ); // Apply the window's transform about the anchor point CGContextConcatCTM(context, [currentWindow transform]); // Offset by the portion of the bounds left of and above the anchor point CGContextTranslateCTM(context, -[currentWindow bounds].size.width * [[currentWindow layer] anchorPoint].x, -([currentWindow bounds].size.height ) * [[currentWindow layer] anchorPoint].y ); // Render the layer hierarchy to the current context [[currentWindow layer] renderInContext:context]; // Restore the context CGContextRestoreGState(context); } } // Retrieve the screenshot image UIImage *image = UIGraphicsGetImageFromCurrentImageContext().retain; UIGraphicsEndImageContext(); return [image autorelease];} 

Когда представлен контроллер представления, цикл for в вышеуказанном коде повторяется более одного раза, и я получаю пустое изображение, когда отображается mfmailcomposeviewcontroller. хотя контроллер панели вкладок контроллера v iew ниже этого виден.

Но когда я нажимаю кнопку отмены почтового компилятора, лист действий, который появляется на экране, также не нарисован.

Это связано с непрозрачностью в UIGraphicsBeginImageContextWithOptions?

Я хочу знать, как получить изображение экрана, когда представлен другой контроллер представления.

Не удается ли получить снимки экрана по умолчанию?

Пожалуйста помоги.

Заранее спасибо.

Ну, вы можете просто добавить

 ViewOnTop.alpha = 0.0; 

к представлению, над которым вы хотите сделать снимок экрана. Сначала это приведет к тому, что представление сверху уменьшит его альфа- свойство до 0, делая его практически прозрачным, а затем вы снимаете снимок экрана

Добавьте вышеуказанный код здесь

 - (UIImage*)screenshot { ViewOnTop.alpha = 0.0; ............ ................... } 

РЕДАКТИРОВАТЬ :

Для viewcontroller в том же коде добавьте свойство dismissViewController к представлению, которое представлено, чтобы в конечном итоге было видно, какой вид скриншота вы видите.

  • Swift: Скриншот без панели вкладок
  • drawViewHierarchyInRect - авария на Iphone6 ​​plus (Ios 8.2)
  • Давайте будем гением компьютера.