如何在Xcode / Swift中共享“截图”整个滚动视图?

时间:2018-07-31 22:12:37

标签: ios swift uiscrollview share screenshot

有人可以告诉我在哪里添加帧大小或范围以捕获整个滚动视图,它的宽度设置为任意,高度为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来了。不用担心每次按下按键后便会重命名,或者我可以与之共享其他应用程序。

我在这里看到过其他文章,但遇到崩溃或无数错误,并且从一开始它们已经过时了。

谢谢您的帮助。

1 个答案:

答案 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