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