Swift - 创建屏幕上和屏幕外的 UITextView 内容图像
Swift - Create image of UITextView content that is both onscreen and offscreen
我有一个占据整个场景(视图)的 UITextView。 textviews 的长度取决于内容的多少。它可能很长,因此不会全部显示在屏幕上——您必须滚动才能看到其余部分。此外,内容可以使用 NSTextAttachment 在其中包含图像。 我的目标是创建整个文本视图的图像。它甚至应该包括屏幕外的内容(当前不可见)。这是我目前所拥有的:
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)
}
感谢这个 post 和其他人 Getting a screenshot of a UIScrollView, including offscreen parts。
期待您的帮助!谢谢!
更新 1:
我创建了这个变量 var pageSize: CGSize = CGSizeMake(320, 800)
并尝试像这样添加它:UIGraphicsBeginImageContext(pageSize)
。这也不起作用,因为它只拍摄当前屏幕截图。无论如何,这是一个固定大小,不会在很长的 运行 中工作,因为内容大小可能会改变 --- 只是想看看它是如何工作的。
仍在寻找答案...
我自己想出来了。这对我有用:
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)
}
我有一个占据整个场景(视图)的 UITextView。 textviews 的长度取决于内容的多少。它可能很长,因此不会全部显示在屏幕上——您必须滚动才能看到其余部分。此外,内容可以使用 NSTextAttachment 在其中包含图像。 我的目标是创建整个文本视图的图像。它甚至应该包括屏幕外的内容(当前不可见)。这是我目前所拥有的:
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)
}
感谢这个 post 和其他人 Getting a screenshot of a UIScrollView, including offscreen parts。
期待您的帮助!谢谢!
更新 1:
我创建了这个变量 var pageSize: CGSize = CGSizeMake(320, 800)
并尝试像这样添加它:UIGraphicsBeginImageContext(pageSize)
。这也不起作用,因为它只拍摄当前屏幕截图。无论如何,这是一个固定大小,不会在很长的 运行 中工作,因为内容大小可能会改变 --- 只是想看看它是如何工作的。
仍在寻找答案...
我自己想出来了。这对我有用:
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)
}