创建 UITextView 全部内容的位图

Posted

技术标签:

【中文标题】创建 UITextView 全部内容的位图【英文标题】:Create bitmap of UITextView's entire content 【发布时间】:2011-10-16 20:17:56 【问题描述】:

我正在尝试获取 UITextView 内容的位图。我可以通过以下方式获取当前屏幕上 UITextView 内容的位图:

UIGraphicsBeginImageContext(myTextView.bounds.size);
[myTextView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
myImageView.image=resultingImage;

UIGraphicsEndImageContext();

但我想要所有内容的位图,而不仅仅是屏幕上可见的内容。这可能吗?请注意,我不仅想要 UITextView 的文本,还想要内容本身的位图。我四处搜索,发现如何在 android 中使用 getDrawingCache 执行此操作,但找不到目标 c 的任何内容。

【问题讨论】:

看看这个:***.com/questions/3539717/… 正是我需要的@Mat 非常感谢! 不客气……请注意,如果要渲染一个巨大的 uiview(如长 tableview),则该方法需要很长时间才能执行。 【参考方案1】:

一种方法是制作UITextView 的副本,然后将副本的大小调整为其内容大小(只要内容大小大于帧大小)。

在 Swift 中是这样的:

func imageFromTextView(textView: UITextView) -> UIImage 

    // Make a copy of the textView first so that it can be resized 
    // without affecting the original.
    let textViewCopy = UITextView(frame: textView.frame)
    textViewCopy.attributedText = textView.attributedText

    // resize if the contentView is larger than the frame
    if textViewCopy.contentSize.height > textViewCopy.frame.height 
        textViewCopy.frame = CGRect(origin: CGPointZero, size: textViewCopy.contentSize)
    

    // draw the text view to an image
    UIGraphicsBeginImageContextWithOptions(textViewCopy.bounds.size, false, UIScreen.mainScreen().scale)
    textViewCopy.drawViewHierarchyInRect(textViewCopy.bounds, afterScreenUpdates: true)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image

这使您可以获取所有内容的图像,甚至是不滚动不可见的部分。

备注

我比较笼统的回答是here。

textViewCopy 只是框架和属性文本的副本。这应该足以获得完整的图像。但是,如果出于某种原因需要更精确的副本,则可以执行以下操作:(explanation)

let tempArchive = NSKeyedArchiver.archivedDataWithRootObject(textView)
let textViewCopy = NSKeyedUnarchiver.unarchiveObjectWithData(tempArchive) as! UITextView 

【讨论】:

以上是关于创建 UITextView 全部内容的位图的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 创建屏幕上和屏幕外的 UITextView 内容的图像

Xcode:在 UITextView 内定位图像

可变高度 UITextView

UITextView 中不必要的换行符

UITable Cell 在单元格中有 UITextView 时无法选择

SwiftUI UITextView 协调器不起作用