我正在寻找对包括键盘在内的整个 iPhone 屏幕进行快照的正确方法。
我找到了一些截图屏幕的代码:
CGRect screenCaptureRect = [UIScreen mainScreen].bounds;
UIView *viewWhereYouWantToScreenCapture = [[UIApplication sharedApplication] keyWindow];
//screen capture code
UIGraphicsBeginImageContextWithOptions(screenCaptureRect.size, NO, [UIScreen mainScreen].scale);
[viewWhereYouWantToScreenCapture drawViewHierarchyInRect:screenCaptureRect afterScreenUpdates:NO];
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但它也不能捕获键盘。看起来 keyWindow 不包含键盘 View 。
顺便说一句,我需要 UIImage
作为最终结果,而不是 UIView
,所以我不能使用其他快照 API。
有什么想法可以做到这一点并获得最佳性能吗?
最佳答案
键盘放在其他窗口。而在 iOS9 中键盘配件放置在不同的位置。所以最好的解决方案是渲染所有窗口。
这是工作代码:
- (UIImage*)fullScreenShot {
CGSize imgSize = [UIScreen mainScreen].bounds.size;
UIGraphicsBeginImageContextWithOptions(imgSize, NO, 0);
for (UIWindow* window in [UIApplication sharedApplication].windows) {
if (![window respondsToSelector:@selector(screen)] || window.screen == [UIScreen mainScreen]) {
[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
}
}
UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
关于ios - 包括键盘的 iPhone 快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28169843/