截屏在开发中,偶尔会用到, 这里给大家介绍一下Swift 两个方法以及区别, OC的话,如果有需要,可以自己改写
方法实现
static func getScreenShot() -> UIImage{
let windown = UIApplication.sharedApplication().keyWindow
// 01 开启图片上下文
UIGraphicsBeginImageContextWithOptions((windown?.bounds.size)!, true, UIScreen.mainScreen().scale)
=================**方法一**==================
// let context = UIGraphicsGetCurrentContext()// 02 获取图片上下文
// windown?.layer.renderInContext(context!)// 03 将 layer 渲染到图片上下文中
===============**方法一**====================
===============**方法二**====================
windown?.drawViewHierarchyInRect((windown?.bounds)!, afterScreenUpdates: false)
//afterScreenUpdates如果是true, 则是addSubview之后, 如果是false,则是addSubview之前
//自iOS7开始,UIView类提供了一个方法-drawViewHierarchyInRect:afterScreenUpdates:
===============**方法二**====================
// 获取图片
let img = UIGraphicsGetImageFromCurrentImageContext()
// 关闭图片上下文
UIGraphicsEndImageContext()
// 将图片存储到本地
UIImagePNGRepresentation(img)?.writeToFile("/Users/a/Desktop/w.png", atomically: true)
return img
}
具体区别如下,如果点击按钮执行如下代码
let view = YYComposeView()
view.backgroundColor = UIColor.redColor()
self?.view.addSubview(view)
UIImage.getScreenShot()
//如果是方法1,那么会截取 addSubview 之后的屏幕.
//如果是方法2, 截取的是 主要看 afterScreenUpdates
网友评论