ios - 包括键盘的 iPhone 快照

标签 ios objective-c uikeyboard snapshot uiwindow

我正在寻找对包括键盘在内的整个 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/

相关文章:

ios - 使用 overCurrentContext 呈现 View Controller ,然后推送到导航堆栈会导致导航栏重叠

ios - iOS中打印nil内存地址显示0x0表示没有存储空间?

ios - UIKeyboard 将通过交互式键盘关闭更改框架,而不是连续调用

ios - UIView inputView滑动动画

ios - 我是否需要为我的 iOS 应用程序使用 Spotlight 扩展程序?

ios - 无法识别 GMSMapView 中 subview 上的手势

iphone objectiveC 分配/释放问题

ios - UIButton contentVerticalAlignment 不居中按钮图像

iOS 8——对导航栏和状态栏应用模糊

ios - 如何在不显示 UIKeyboard 的情况下选择 UITextField