2017-08-02 172 views
0

我正在研究将UIView转换为UIImage的扩展,但我遇到了一个奇怪的问题,即我能够在iOS模拟器中获得正确的图像,但我在实际设备中获取了黑色图像。以下是我的代码将UIView转换为UIImage Swift 3

extension UIView { 
func screenshotImage() -> UIImage { 
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, 0.0); 
    self.drawHierarchy(in: self.bounds, afterScreenUpdates: true) 
    let screenShot = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return screenShot! 
} 
} 

任何人都可以解释我做错了什么,我无法在实际设备中获得正确的图像吗?

编辑

观察:

每当我路过一个UIView到这个扩展的模拟器,我得到这个观点

的完美形象每当我路过一个UIView到这个扩展在实际的设备我得到一个完全黑色的图像,而不是UIView中的元素,而不像模拟器的结果。

+0

请检查[这里](https://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina-display),我想你得到了答案。 –

+0

告诉我们你的代码如何不能做你想做的事情。你得到了什么错误,或者结果不是你想要的? –

+0

@DuncanC我编辑了我的问题并添加了我的观察。让我知道如果它仍然不清楚 – iYoung

回答

3
extension UIImage { 
    class func imageWithView(view: UIView) -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0) 
     view.drawHierarchy(in: view.bounds, afterScreenUpdates: true) 
     let img = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return img 
    } 
} 

希望这有助于!

+0

嗨,谢谢你的回答,我已经尝试过了,只是再次验证它,我也得到了同样的事情。它在模拟器上工作得非常好,但它在真实设备上返回黑色图像。 – iYoung

+0

如果你得到一个黑色的图像,你可能想尝试设置不透明为false:'UIGraphicsBeginImageContextWithOptions(view.bounds.size,false,0.0)' – OffensivelyBad