6

上部のステータスバーが含まれているiPhoneでスクリーンショットをキャプチャする方法を探しています。現在、次のコードを使用しています。

    UIGraphicsBeginImageContext(self.view.bounds.size); //self.view.window.frame.size
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

上記のコードは、iPhone UIViewのスクリーンショットを正常に取得しますが、上部のステータスバーは含まれていません(代わりに、20ピクセルの空白スペースがあります)。

4

4 に答える 4

11

iOS 7 以降、プライベート API を使用せずにこれを行うことができます。

UIView *screenshotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];

この質問に対する私の回答を参照してください。

iOS 7 でステータス バーを移動する

于 2013-09-25T17:45:21.693 に答える
3

プライベートAPIを呼び出すことで、画面のコンテンツ全体を取得できますUIGetScreenImage詳細については、同様の質問に対する私の以前の回答を参照してください。

于 2009-08-18T00:02:30.487 に答える
1

プライベート API を使用する代わりに、UIWindow 全体を画像コンテキストにレンダリングしてみませんか? self.viewコード内でに置き換えるだけで十分な場合がありself.view.windowます。

[UIApplication sharedApplication]インスタンスのプロパティとして現在のウィンドウを取得することもできます。ステータス バーが別のウィンドウ レイヤーにある可能性があり、ウィンドウを順番にレンダリングする必要があるかもしれません。

このようなもの:

UIGraphicsBeginImageContext(self.view.window.frame.size);
for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
   [window.layer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage *screenshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

いずれにせよ、おそらくプライベート API に頼る必要はありません。

于 2009-11-15T17:23:58.660 に答える
1

2009 年 10 月 8 日の時点で、UIGetScreenImage を使用するとアプリが拒否されました。:( 私はそれを使用することはお勧めしません。Apple はすべてのアプリをクリーンアップし、新しい 3.x OS/API に準拠させようとしていると思います。私は代替案を探しています。誰か提案があれば。ビデオAPI?

于 2009-10-09T16:19:35.833 に答える