如何获取 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
进行检查时,即使UITextView
和Snapshot
图像具有相同的width
和height
。我也尝试了不同的代码,但没有奏效。谁能告诉我如何修复它,我想要UITextView
的完整快照。
这是我的 UITextView
和 Frame
(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 的完整快照的主要内容,如果未能解决你的问题,请参考以下文章