我有一个占据整个场景(视图)的UITextView。文本视图的长度取决于有多少内容。它可能很长,因此不会全部出现在屏幕上 - 您必须滚动查看其余部分。此外,内容可以使用NSTextAttachment在其中包含图像。 我的目标是创建整个textview的图像。它甚至应该包括屏幕外(当前不可见)的内容。以下是我到目前为止的情况:
func textViewImage() -> UIImage {
UIGraphicsBeginImageContext(textView.contentSize)
let savedContentOffset: CGPoint = textView.contentOffset
let savedFrame: CGRect = textView.frame
textView.contentOffset = CGPointZero
textView.frame = CGRectMake(0, 0, textView.contentSize.width, textView.contentSize.height)
textView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
textView.contentOffset = savedContentOffset
textView.frame = savedFrame
UIGraphicsEndImageContext()
return image
}
这不起作用。它只拍摄屏幕上当前可见的内容。我通过尝试通过短信或邮件分享来检查此代码是否正常工作:
@IBAction func share(sender: UIBarButtonItem) {
let shareTextViewImage = textViewImage()
let activityController = UIActivityViewController(activityItems: [shareTextViewImage], applicationActivities: nil)
self.presentViewController(activityController, animated: true, completion: nil)
}
由于这篇关于SO和其他人Getting a screenshot of a UIScrollView, including offscreen parts的帖子,我得到了我所做的一切。
期待一些帮助!谢谢!
更新1:
我创建了这个变量var pageSize: CGSize = CGSizeMake(320, 800)
并尝试添加它:UIGraphicsBeginImageContext(pageSize)
。这不起作用,因为它只拍摄当前屏幕。无论如何这是一个固定的大小,从长远来看不会起作用,因为内容大小可能会改变 - 只是想知道这将如何解决。
仍在寻找答案......
答案 0 :(得分:3)
我自己想通了。这对我有用:
func textViewImage() -> UIImage {
var image: UIImage? = nil
UIGraphicsBeginImageContextWithOptions(textView.contentSize, textView.opaque, 0.0)
let savedContentOffset: CGPoint = textView.contentOffset
let savedFrame: CGRect = textView.frame
textView.contentOffset = CGPointZero
textView.frame = CGRectMake(0, 0, textView.contentSize.width, textView.contentSize.height)
textView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
image = UIGraphicsGetImageFromCurrentImageContext()
textView.contentOffset = savedContentOffset
textView.frame = savedFrame
UIGraphicsEndImageContext()
return image!
}
如果你想分享这张图片:
@IBAction func share(sender: UIBarButtonItem) {
let img = textViewImage()
let shareItem = [img]
let activityController = UIActivityViewController(activityItems: shareItem, applicationActivities: nil)
self.presentViewController(activityController, animated: true, completion: nil)
}