捕获带有状态栏的iPhone屏幕?

6 iphone screenshot objective-c

我正在寻找一种方法来捕获包含顶级状态栏的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);
Run Code Online (Sandbox Code Playgroud)

上面的代码成功获取了iPhone UIView的屏幕截图,但不包括顶级状态栏(在它的位置只是一个空白的20px空间).

Sim*_*oyd 11

从iOS 7开始,您可以在不使用私有API的情况下执行此操作

UIView *screenshotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];
Run Code Online (Sandbox Code Playgroud)

看看我对这个问题的回答:

移动iOS 7中的状态栏


rpe*_*ich 3

您可以通过调用私有API获取屏幕的全部内容UIGetScreenImage。详情请参阅我之前类似问题的回答。

  • 对于私有 API 的使用,感觉各有不同。我的看法是:1)使用私有 API 违反了 Apple 的规则,并且是您的应用程序可能被拒绝或从商店下架的(极少数)明显方式之一;但是... 2) 像屏幕截图这样简单的东西很可能会在雷达下飞行,不会被审阅者注意到;然而... 3) Apple 可以在未来的任何时候、任何版本、以任何方式、出于任何原因更改该 API,而不会发出任何警告。我认为任何使用私有 API 都会让您陷入支持难题,并有可能带来糟糕的用户体验。 (3认同)