ぴよログ

↓に移転したのでこっちは更新されません、多分。

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

移転しました →

コードからでもスクリーンショット風の画像を得ることができます。ステータスバーは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];
}