如何在不向用户显示视图的情况下捕获整个滚动视图的图片

Posted

技术标签:

【中文标题】如何在不向用户显示视图的情况下捕获整个滚动视图的图片【英文标题】:How to capture pictures of the whole scroll view without showing the view to the user 【发布时间】:2019-02-27 12:08:45 【问题描述】:

我正在我的应用程序中实现打印功能,我希望将屏幕图片发送到打印机 SDK。

我正在创建一个虚拟视图,在该视图上我有一个滚动视图,并且在这个滚动视图上我有一个列表,列出了要打印的产品列表,添加为子视图。此滚动视图的高度大于 iPad 的屏幕尺寸,因为列表很大。

我想用整个列表(产品不可见和不可见或 UIScreen 的列表)捕获整个 Scroll View 的图片。另外,我不希望用户可以看到此视图。一切都应该在后台发生。

【问题讨论】:

可能相关:***.com/questions/3539717/…. 【参考方案1】:

您可以在滚动视图中渲染视图并获得UIImage

在下面的代码中,视图viewInScrollViewUIScrollView 中的子视图,并且所有元素都存在于该视图中。

UIGraphicsBeginImageContext(scrollView.contentSize)      
viewInScrollView.layer.renderInContext(UIGraphicsGetCurrentContext())
var myImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

myImage 变量将具有整个scrollView 的图像。

【讨论】:

你不应该将大小设置为与 contentView 相同的大小,因为内容可能大于视图大小 抱歉更新代码,忘记更改那部分。谢谢 如何在不向用户呈现视图的情况下执行此操作?如果我确实隐藏了视图,则会发生此 UIGraphicsGetCurrentContext 的崩溃。 @akshaytule 这里是一个相关的问题,***.com/questions/11061850/…,我希望它能回答你的问题。在接受的解决方案中,该人说您可以从超级视图中删除而不是隐藏。

以上是关于如何在不向用户显示视图的情况下捕获整个滚动视图的图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在不向它们提供 ID 的情况下更改按钮单击时 textview 的可见性?

Angular 2:如何在不向用户显示标签的情况下从 JSON 响应呈现 HTML? [复制]

如何在不向用户显示堆栈跟踪的情况下处理 servlet 过滤器中的错误状态?

如何在不滚动的情况下直接降落在特定位置?

如何在不滚动选择器视图的情况下选择当前时间

如何在不重绘整个视图的情况下更新 NSView 的一部分