在显示之前将 uiview 转换为 uiimage

Posted

技术标签:

【中文标题】在显示之前将 uiview 转换为 uiimage【英文标题】:Convert uiview to uiimage before its displayed 【发布时间】:2018-04-19 15:32:27 【问题描述】:

我正在尝试在特定坐标处将 UIView 添加到谷歌地图,据我所知,最简单的方法是将其转换为图像并将其添加为 GMSMarker。我找到了一个不错的扩展,可以为我将视图转换为图像:

extension UIImage 
    convenience init(view: UIView) 
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
        view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.init(cgImage: (image?.cgImage)!)
    

问题是视图尚未渲染,因此其框架为零。该视图包含的文本仅在初始化时长度会有所不同,因此我无法为其设置框架。

任何帮助将不胜感激

谢谢

【问题讨论】:

【参考方案1】:

该扩展程序运行良好(经过测试),因此它的全部内容都与渲染后的调用有关。在渲染发生后尝试 viewDidAppear 或在函数中调用它。

override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)
    newImageView.image = UIImage(view: self.topView)

如果这不起作用,您可以分享您调用扩展程序的代码吗?

【讨论】:

这是我的问题,我正在测试我的实现并在视图控制器的 init 中调用它,而不是在视图加载并且 api 请求成功返回之后更实际地调用它。谢谢 @Wazza,如果这有帮助,将不胜感激选择它作为解决方案。谢谢。 抱歉完全忘记了,太兴奋了 没问题!祝你好运!

以上是关于在显示之前将 uiview 转换为 uiimage的主要内容,如果未能解决你的问题,请参考以下文章

在不先显示 UIView 的情况下将 UIView 转换为 UIImage?

如何将(编辑的)UIView 转换为 UIImage?

透明度问题 - 将 UIView 转换为 UIImage 时

如何将 UIView 转换为高分辨率的 UIImage?

UIView转换为UIImage

绘制 UIView 并转换为 UIImage