如何截取单个视图对象而不是整个屏幕的屏幕截图?

How do I take a screenshot of a single view object instead of the entire screen?

所以我有一个 UIImageView,其中一些文本覆盖在顶部和底部。我想获取屏幕截图,这样我就有了一个新图像,上面覆盖了文字。这是我正在使用的代码,但我无法正确截取 UIImageView 对象的屏幕截图。

func generateImage() -> UIImage
{
    // Render view to an image
    UIGraphicsBeginImageContext(self.view.frame.size)
    view.drawViewHierarchyInRect(self.imageView.frame,
        afterScreenUpdates: true)
    let memeImage: UIImage =
    UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return memeImage
}

或者,我也尝试了下面的代码,虽然保存的图像是屏幕的右侧 size/area,但它最终得到了我截图的模糊版本:

UIGraphicsBeginImageContext(self.imageView.frame.size)
    let context = UIGraphicsGetCurrentContext()

imageView.layer.renderInContext(context!) // tried drawInContext but it didn't work at all
let memeImage = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()
return memeImage

首先,使用 UIGraphicsBeginImageContextWithOptions 将允许您调整比例因子以适合您的屏幕尺寸。其次,传入要捕获的视图将确保您使用的是正确的 view/subviews.

func generateImage(currentView: UIView) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(currentView.frame.size, true, 0.0)
        currentView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let memeImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        //UIImageWriteToSavedPhotosAlbum(memeImage, nil, nil, nil)

        return memeImage
    }