首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将UIView转换为图像

如何将UIView转换为图像
EN

Stack Overflow用户
提问于 2015-06-08 01:15:40
回答 12查看 97.3K关注 0票数 114

我想要将UIView转换为图像并将其保存在我的应用程序中。谁能告诉我如何截图或将其转换为图像,以及将其保存在应用程序(而不是相机胶卷)中的最好方法是什么?以下是视图的代码:

代码语言:javascript
复制
var overView   = UIView(frame: CGRectMake(0, 0, self.view.frame.width/1.3, self.view.frame.height/1.3))
overView.center = CGPointMake(CGRectGetMidX(self.view.bounds),
CGRectGetMidY(self.view.bounds)-self.view.frame.height/16);
overView.backgroundColor = UIColor.whiteColor()
self.view.addSubview(overView)
self.view.bringSubviewToFront(overView)
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2015-06-08 03:26:52

例如,如果我有一个大小为: 50 50,100,100的视图。我可以使用以下内容来截图:

代码语言:javascript
复制
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), false, 0);
    self.view.drawViewHierarchyInRect(CGRectMake(-50,-5-,view.bounds.size.width,view.bounds.size.height), afterScreenUpdates: true)
    var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
票数 13
EN

Stack Overflow用户

发布于 2016-12-23 00:56:55

UIView上的一个扩展应该可以做到这一点。

代码语言:javascript
复制
extension UIView {

    // Using a function since `var image` might conflict with an existing variable
    // (like on `UIImageView`)
    func asImage() -> UIImage {
        let renderer = UIGraphicsImageRenderer(bounds: bounds)
        return renderer.image { rendererContext in
            layer.render(in: rendererContext.cgContext)
        }
    }
}

苹果从iOS 10开始就不鼓励使用P3,因为它引入了P3色域。UIGraphicsBeginImageContext是sRGB,并且仅为32位。他们引入了新的UIGraphicsImageRenderer应用程序接口,它是完全色彩管理的,基于块,具有PDF和图像的子类,并自动管理上下文生存期。有关更多细节,请查看WWDC16 session 205 (图像渲染大约在11:50开始)

要确保它在每台设备上都能工作,请使用回退到iOS早期版本的#available

代码语言:javascript
复制
extension UIView {

    // Using a function since `var image` might conflict with an existing variable
    // (like on `UIImageView`)
    func asImage() -> UIImage {
        if #available(iOS 10.0, *) {
            let renderer = UIGraphicsImageRenderer(bounds: bounds)
            return renderer.image { rendererContext in
                layer.render(in: rendererContext.cgContext)
            }
        } else {
            UIGraphicsBeginImageContext(self.frame.size)
            self.layer.render(in:UIGraphicsGetCurrentContext()!)
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return UIImage(cgImage: image!.cgImage!)
        }
    }
}
票数 238
EN

Stack Overflow用户

发布于 2015-11-11 12:37:22

您可以使用扩展

代码语言:javascript
复制
extension UIImage {
    convenience init(view: UIView) {
        UIGraphicsBeginImageContext(view.frame.size)
        view.layer.render(in:UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.init(cgImage: image!.cgImage!)
    }
}

下面是swift的3/4版本:

代码语言:javascript
复制
extension UIImage {
    convenience init(view: UIView) {
        UIGraphicsBeginImageContext(view.frame.size)
        view.layer.render(in:UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.init(cgImage: image!.cgImage!)
    }
}
票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30696307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档