我想要将UIView转换为图像并将其保存在我的应用程序中。谁能告诉我如何截图或将其转换为图像,以及将其保存在应用程序(而不是相机胶卷)中的最好方法是什么?以下是视图的代码:
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)
发布于 2015-06-08 03:26:52
例如,如果我有一个大小为: 50 50,100,100的视图。我可以使用以下内容来截图:
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();
发布于 2016-12-23 00:56:55
UIView
上的一个扩展应该可以做到这一点。
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
:
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!)
}
}
}
发布于 2015-11-11 12:37:22
您可以使用扩展
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版本:
extension UIImage {
convenience init(view: UIView) {
UIGraphicsBeginImageContext(view.frame.size)
view.layer.render(in:UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.init(cgImage: image!.cgImage!)
}
}
https://stackoverflow.com/questions/30696307
复制相似问题