有人可以告诉我在哪里添加帧大小或范围以捕获整个滚动视图,它的宽度设置为任意,高度为2200p。 导入UIKit
ViewController类:UIViewController {
@IBAction func shareButton(_ sender: Any) {
UIGraphicsBeginImageContextWithOptions(view!.frame.size, false, 0.0)
view!.drawHierarchy(in: view!.frame, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
let activityVC = UIActivityViewController(activityItems: [image!], applicationActivities: nil)
let vc = self.view?.window?.rootViewController
activityVC.popoverPresentationController?.sourceView = vc?.view
activityVC.popoverPresentationController?.sourceView = self.view
self.present(activityVC, animated: true, completion: nil)
}
}
那是我的代码,它确实需要截图,但是只有屏幕上的内容和UIActivityController来了。不用担心每次按下按键后便会重命名,或者我可以与之共享其他应用程序。
我在这里看到过其他文章,但遇到崩溃或无数错误,并且从一开始它们已经过时了。
谢谢您的帮助。
答案 0 :(得分:1)
您遇到的问题是,因为您将图形上下文的大小设置为视图的大小,我猜这是视图控制器的“ view”属性,该属性与屏幕的大小相同。
我首先将所有scrollview内容放入内容视图(只是一个UIView充当容器),然后将该内容视图放入scrollview。
然后我将在UIView上创建一个类别以创建任何UIView的图像:
public extension UIView {
/**
Captures view and subviews in an image
*/
func snapshotViewHierarchy() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale)
self.drawHierarchy(in: self.bounds, afterScreenUpdates: true)
let copied = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return copied
}
}
并在内容视图上调用该函数,因此内容视图使用其自身的边界而不是viewController.view的框架在上下文中呈现。
// get a screenshot of just this view
guard let snapshot = myVc.contentView.snapshotViewHierarchy() else {
return
}
// save photo
UIImageWriteToSavedPhotosAlbum(snapshot, nil, nil, nil)
// do other stuff... etc...
这里是一个简单演示项目的链接,该项目对高2200点的滚动视图中的视图进行快照,并将该视图作为图像保存到用户的照片胶卷中。
Demo Project Github link - https://github.com/appteur/ios_scrollview_image