ios 7 drawViewHierarchyInRect:afterScreenUpdates:仅在 iPad 上出现黑屏

Posted

技术标签:

【中文标题】ios 7 drawViewHierarchyInRect:afterScreenUpdates:仅在 iPad 上出现黑屏【英文标题】:ios 7 drawViewHierarchyInRect:afterScreenUpdates: black screen on iPad only 【发布时间】:2014-02-12 14:28:14 【问题描述】:

我遇到了非常奇怪的情况...我正在尝试通过调用 drawViewHierarchyInRect: afterScreenUpdates: 从滚动视图(contentSize 超出屏幕边界三倍)捕获内容,如下所示:

+ (UIImage *) imageFromScrollView: (UIScrollView *) scrollView 

    UIGraphicsBeginImageContext(size);

    [view drawViewHierarchyInRect: CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)
               afterScreenUpdates: YES];

    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();  

    return image;  

它适用于:iPhone 设备、iPhone 和 iPad 模拟器,但适用于 iPad 设备。你有过类似的问题吗?我将不胜感激!

【问题讨论】:

你试过[view.layer renderInContext:UIGraphicsGetCurrentContext()];看看你是否得到任何不同的结果?此外,它不应该使图像完全变黑,但另一件事是你不应该真正使用 UIGraphicsBeginImageContext()。而是使用 UIGraphicsBeginImageContextWithOptions()。这样它就可以在视网膜/非视网膜设备上正确显示。 我也试过UIGraphicsGetCurrentContext()UIGraphicsBeginImageContext()。之前我用renderInContext:你提到的方法,但是我想利用ios 7的新方法,这似乎更快。 【参考方案1】:

使用

UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);

NO 在这里很重要,因为它返回一个不透明的图像。

【讨论】:

【参考方案2】:

此代码对我有用。

UIImage *image = [SnapShotter snapShotEntireScrollingView:self.receiptTableView];


+ (UIImage *)snapShotEntireScrollingView:(UIScrollView *)view

    return [self snapShotEntireScrollingView:view withEdgeInsets:UIEdgeInsetsZero];



+ (UIImage *)snapShotEntireScrollingView:(UIScrollView *)view withEdgeInsets:(UIEdgeInsets)insets

    CGRect currentFrame = view.frame;

    CGRect fullFrame = view.frame;
    fullFrame.size.width = MAX(currentFrame.size.width, view.contentSize.width);
    fullFrame.size.height = MAX(currentFrame.size.height, view.contentSize.height);
    view.frame = fullFrame;

    UIImage *image = [self snapShotView:view withEdgeInsets:insets];

    view.frame = currentFrame;
    return image;

【讨论】:

您的解决方案非常简单,但它仍然无法在我的 iPad 设备上运行...最后,我决定使用 renderInContext: 方法捕获我的屏幕。我想为 iOS 7 使用新方法,但这是不可能的。感谢您的帮助:)

以上是关于ios 7 drawViewHierarchyInRect:afterScreenUpdates:仅在 iPad 上出现黑屏的主要内容,如果未能解决你的问题,请参考以下文章

Ipad图标大小Ipad设置ios 5-7 29pt 1x 2x - iPad聚光灯ios 7 40 pt - iPad app ios 7 76 pt [关闭]

使用 xcode 5 (iOS 7 sdk) 构建 iOS 7 UI

为啥这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?

如何使用 Xcode 7.1 和 iOS 部署目标 iOS 7.1 启动应用程序?

带有自定义声音的 UILocalNotification 仅适用于 iOS 6.1 和 iOS 7.1,不适用于 iOS 7.0

在 ios 7 和 ios 7+ 中处理设备特定图像的最佳方法