如何获取 UITextView 的完整快照

Posted

技术标签:

【中文标题】如何获取 UITextView 的完整快照【英文标题】:How To Take Full Snapshot Of UITextView 【发布时间】:2018-09-25 11:19:21 【问题描述】:

我正在尝试使用以下代码拍摄UITextView 的快照

extension UIView 

    func pb_takeSnapshot() -> UIImage 
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)
        drawHierarchy(in: self.frame, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    

但我给了我一半的快照。当我使用print 进行检查时,即使UITextViewSnapshot 图像具有相同的widthheight。我也尝试了不同的代码,但没有奏效。谁能告诉我如何修复它,我想要UITextView 的完整快照。

这是我的 UITextViewFrame (0.0, 97.0, 414.0, 234.0)

这是使用pb_takeSnapshot()Frame 的快照图像宽度 = 414.0,高度 = 234.0 。

【问题讨论】:

将 drawHierarchy 调用更改为 `drawHierarchy(in: self.bounds, afterScreenUpdates: true)`,我认为你需要在边界内绘制它 @FruitAddict 我试过了,但现在它给了我像that 这样的图像。 您能否打印 self.bounds 并查看 x 和 y 的值(在您将 drawHierarchy 更改为使用 self.bounds 而不是 self.frame 之后)?边界应为 (0.0, 0.0, 414.0, 234.0)。 @PeteMorris 我在drawHierarchy..... 之后打印self.bounds,它给了我结果self.bounds (0.0, -94.0, 414.0, 234.0) 【参考方案1】:

您不应该使用 frame 进行绘图(出于某种原因,正如您在 cmets 中所说)您的 bounds 没有给出正确的值。

如果不查看视图层次结构,将很难调试原因,但是您仍然应该能够创建正确的快照。

创建矩形以从头开始绘制:

let rect = CGRect(x: 0.0, y: 0.0, width: bounds.size.width, height: bounds.size.height)
drawHierarchy(in: rect, afterScreenUpdates: true)

【讨论】:

以上是关于如何获取 UITextView 的完整快照的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 UItextview 触摸坐标位置

如何从 UITextView 获取选定的文本框

如何在 UITextView 中获取文本矩形

如何从点击的单词 UITextview 中获取字符范围

如何从 Swift 中的 UITextView 获取链接范围

如何使用 TextKit(不是 NSAttributedStrings)在 UITextView 中获取属性信息