ios - 拍摄 View 快照而不将其添加到屏幕

标签 ios uiview uiimage core-graphics loadnibnamed

我试图从 nib 加载一个 View ,配置它,并拍摄它的快照,而不是将它添加到屏幕上:

+ (void)composeFromNibWithImage:(UIImage*)catImage completion:(CompletionBlock)completion {

    NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"CatNib" owner:nil options:nil];
    CatView *catView = [nibContents firstObject];

    //here, catView is the correct size from the nib, but is blank if inspected with the debugger

    catView.catImageView.image = catImage;
    catView.furButton.selected = YES;    
    UIImage *composite = [UIImage snapshot:catView];
    completion(composite);
}

快照是典型的地方:

+ (UIImage *)snapshot:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

但是,当我单步执行代码时,catView 和 composite 的大小都正确但空白。如何从从 nib 加载的 View 创建 UIImage,而不将 View 添加到屏幕?

最佳答案

我前段时间遇到过类似的问题,据我所知,无法拍摄 View 的快照,因为它实际上不在屏幕上。我创建了一个解决方法,并将我想要快照的相关 View 放置在当前 ViewControllers View 边界之外,这样您就不会看到它。在这种情况下,可以创建有效的快照。希望这会有所帮助:)

关于ios - 拍摄 View 快照而不将其添加到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28509471/

相关文章:

ios - App Store Connect 验证时出现 bundle 标识符 "org.cocoapods.device-id"错误

ios - 捕捉 UIView 内容重绘

ios - 如何设置 uiview 背景和 uiimageview 居中、缩放以填充和 mask 到边界?

objective-c - 动画 UIImageView 色调颜色不起作用

ios - 图像 mask 在 iOS 10 beta 3 上失败

ios - NSFileManager:无法在某些设备上创建目录

ios - 错误 - 链接器命令失败,退出代码为 1

ios - 来自 AVCaptureMetadataOutput 委托(delegate)的 UIImage (didOutputMetadataObjects)

ios - 为什么 contentView 在 scrollView 中有一个 y 偏移量

ios - 如何在iOS中检测图像是否为真实图像?