PIYO - Tech & Life -

iPhoneアプリの画面をObjective-Cでキャプチャ

Tips iOS Xcode

コードからでもスクリーンショット風の画像を得ることができます。ステータスバーはUIApplicationのwindow外なのか、画像の中には含まれません。

CGContextを新たに作成し、アプリケーション内のWindowsの内容をそのコンテキストに描画していくという感じでキャプチャのようなことができます。コードは以下の通り。

- (void)captureScreen:(NSString*)savePath
{
  UIWindow* window = [[UIApplication sharedApplication] keyWindow];
  UIGraphicsBeginImageContextWithOptions(window.bounds.size, NO, 0);
  CGContextRef context = UIGraphicsGetCurrentContext();
  for (UIWindow* win in [[UIApplication sharedApplication] windows]) {
    [win.layer renderInContext:context];
  }
 
  UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  [UIImagePNGRepresentation(image) writeToFile:savePath atomically:YES];
}