在CGRect中截取屏幕截图返回空白/失真图像

时间:2017-09-12 19:57:12

标签: ios swift uikit core-graphics screenshot

所以我正在构建一个meme应用程序,通过更改两个标签的文本,您可以创建自己的模因。

常规布局

General Layout of the app 该应用程序包含整个场景中的一个ImageView,其中包含contentMode aspectFit。因此,一些图片在挑选时会重新调整大小。

截取屏幕上方和下方的空白

当我通过以下代码截取图像截图时,我得到了正确的结果。但是,生成的图像上方和下方都有空格。

private func generateMemedImage() -> UIImage {
    //self.navigationController?.setNavigationBarHidden(true, animated: false)
    //        toolBar.isHidden = true

    // Render view to an image
    // Parameter 0.0 is required, so the generated image is not blurry.
    UIGraphicsBeginImageContextWithOptions(view.frame.size, false, 0.0)
    view.drawHierarchy(in: view.frame, afterScreenUpdates: true)
    var memedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    //self.navigationController?.setNavigationBarHidden(false, animated: false)
    //toolBar.isHidden = false

    return memedImage
}

以上代码的结果

因此,为了自动定位标签,我引入了一个矩形containingImageHelperView(下面以红色显示),它基本上是一个添加在所有其他视图之上的视图。 (实际上视图是透明的)

现在我想截取红色区域的截图。

private func generateMemedImage() -> UIImage {
    //self.navigationController?.setNavigationBarHidden(true, animated: false)
    //        toolBar.isHidden = true

    // Render view to an image
    // Parameter 0.0 is required, so the generated image is not blurry.
    UIGraphicsBeginImageContextWithOptions(containingImageHelperView!.frame.size, false, 0.0)
    view.drawHierarchy(in: containingImageHelperView!.frame, afterScreenUpdates: true)
    var memedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    //self.navigationController?.setNavigationBarHidden(false, animated: false)
    //toolBar.isHidden = false

    return memedImage
}

然而,我得到了奇怪的结果。在模拟器上我只得到一张空白(白色)图片,在真实设备上我得到类似的东西(红色圆圈仅用于隐私目的):

请注意,生成的屏幕截图具有正确的大小。但他们没有按预期显示内容。

我希望我足够清楚。请帮忙!

如果有助于更清楚地了解整个项目,可以在此处查看:https://github.com/Shanakor/MemeMe

0 个答案:

没有答案