在iOS7之前,我使用UIGetScreenImage()
函数轻松截取屏幕截图,但在iOS7中,它已被弃用,现在有什么好方法可以存档吗?谢谢!
另外:我需要在任何视图中截取整个屏幕的截图
答案 0 :(得分:4)
我遇到了同样的问题,但没有想法如何解决它。
我尝试IOSurface - IOS Private API - Capture screenshot in background,这在某些应用中运行良好但在游戏中返回黑屏。
然后我尝试了这个应用程序https://github.com/k06a/UIView-FastScreenshot/blob/master/UIView%2BFastScreenshot.m,它使用私有api很好,但是我无法使用theos编译它,总是告诉我“架构armv7的未定义符号:CARenderServerRenderDisplay”。 编辑:我想出了如何使用theos编译它,但返回是空图像。
另外,https://github.com/coolstar/RecordMyScreen在iOS7中运行良好,但现在不是开源的,所以我无法知道它是如何捕获整个屏幕的。
编辑:RecordMyScreen的代码在iOS7上作为跳板调整,你可以参考这个文件https://github.com/coolstar/RecordMyScreen/blob/master/RecordMyScreen/CSScreenRecorder.m这个方法“ - (void)_captureShot:(CMTime)frameTime;”
答案 1 :(得分:1)
替换UIGetScreenImage()的替代方法
CGImageRef screen = UIGetScreenImage();
上面的代码是捕获屏幕的一行代码,但Apple没有为公共应用程序打开上面的API UIGetScreenImage()。即无法上传到Apple批准。因此,捕获屏幕并保存它的另一种方法如下所示。
- (void)captureAndSaveImage
{
// Capture screen here... and cut the appropriate size for saving and uploading
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// crop the area you want
CGRect rect;
rect = CGRectMake(0, 10, 300, 300); // whatever you want
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
imageView.image = img; // show cropped image on the ImageView
}
// this is option to alert the image saving status
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
UIAlertView *alert;
// Unable to save the image
if (error)
alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Unable to save image to Photo Album."
delegate:self cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil];
else // All is well
alert = [[UIAlertView alloc] initWithTitle:@"Success"
message:@"Image saved to Photo Album."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
[alert release];
}
答案 2 :(得分:1)
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
此代码可以帮助您获取 self.view 的屏幕截图,无论哪个应用程序位于前面,它都是iPhone的整个屏幕。如果您在视图中使用了任何图层,然后图层将不会包含在屏幕截图中,为此您必须使用 self.view.layer 。
答案 3 :(得分:0)
UIView类有一个名为:resizableSnapshotViewFromRect的方法:afterScreenUpdates:withCapInsets。
但我从未使用过这种方法,所以我无法告诉你更多关于它的信息。
这篇文章:Capture UIView as UIImage展示了如何将返回的UIView转换为图像。
希望它有用。