里面有 UIScrollView 的 UIView 截图

Posted

技术标签:

【中文标题】里面有 UIScrollView 的 UIView 截图【英文标题】:Screenshot of UIView with UIScrollView inside 【发布时间】:2016-08-18 12:44:09 【问题描述】:

我有一个 UIView,里面包含一个 UIScrollView,实际上它包含一个 UIImageScrollView,一个帮助我缩放 UIImage 的类,我想用缩放的 UIImage 截取 UIView,我找到了这个功能:

 func captureCrop() -> UIImage 
    UIGraphicsBeginImageContextWithOptions(self.viewCapturedFoto.frame.size, true, 0.0)
    self.viewCapturedFoto.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image;

但是当屏幕截图完成时,新的 UIImage 显示没有缩放图像,我的意思是即使我缩放 UIImage 仍然没有缩放。 不知道我解释的对不对

【问题讨论】:

也许你可以把你的屏幕截图插入这里以便更好地理解。 【参考方案1】:

我相信您的问题在于您传递给 UIGraphicsBeginImageContextWithOptions 函数的 size 参数。现在您正在传递整个框架的大小,在滚动视图中,它也包括屏幕外部分。您可以尝试将 size 参数更改为设备屏幕的边界,或者在最坏的情况下,将您的 UIImageScrollView 放在另一个视图中并使用此容器视图的边界来设置图像大小。

供您参考的文档:

声明

func UIGraphicsBeginImageContextWithOptions(_ size: CGSize, _ opaque: Bool, _ scale: CGFloat)

参数

尺寸: 新位图上下文的大小(以磅为单位)。这表示 UIGraphicsGetImageFromCurrentImageContext 函数返回的图像的大小。要获得以像素为单位的位图大小,您必须将宽度和高度值乘以比例参数中的值。

【讨论】:

【参考方案2】:

试试这个。它返回一个 UIView

let screenShot = self.viewCapturedFoto.snapshotViewAfterScreenUpdates(true)

欲了解更多信息,请访问Apple Docs的这一部分

【讨论】:

以上是关于里面有 UIScrollView 的 UIView 截图的主要内容,如果未能解决你的问题,请参考以下文章

带有 AutoLayout 的 UIScrollView 内的 UITableView 动态内容大小高度

UIScrollView 不会随着里面的内容视图滚动

UIScrollView 不会作为子视图在里面滚动

iOS - UIScrollView hitTest 不包含触摸

drawRect 使 UIScrollView 中的滚动变慢

陷入 iOS 自动布局泥潭