gpt4 book ai didi

objective-c - 以编程方式在 iOS 中捕获带有状态栏的完整屏幕截图

转载 作者:技术小花猫 更新时间:2023-10-29 10:13:59 30 4
gpt4 key购买 nike

我正在使用此代码捕获屏幕截图并将其保存到相册。

-(void)TakeScreenshotAndSaveToPhotoAlbum
{
UIWindow *window = [UIApplication sharedApplication].keyWindow;

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(window.bounds.size, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(window.bounds.size);

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}

但问题是每当保存屏幕截图时,我都看到 iPhone 的状态栏没有被捕获。相反,底部会出现一个空白。就像下面的图片: enter image description here

我做错了什么?

最佳答案

状态栏实际上在它自己的 UIWindow 中,在您的代码中您只渲染不包含它的 viewcontroller 的 View 。

“官方”截图方法是here但现在似乎已被 Apple 删除,可能是因为它已过时。

在 iOS 7 下,UIScreen 上现在有一个新方法,用于获取包含整个屏幕内容的 View :

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

这将为您提供一个 View ,然后您可以在屏幕上对其进行操作以获得各种视觉效果。

如果要将 View 层次结构绘制到上下文中,则需要遍历应用程序的窗口 ([[UIApplication sharedApplication] windows]) 并在每个窗口上调用此方法:

- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates

可能能够结合上述两种方法并获取快照 View ,然后在快照上使用上述方法绘制它。

关于objective-c - 以编程方式在 iOS 中捕获带有状态栏的完整屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8508428/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com