我正在使用此Swift代码截取我的应用的截图:
UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我如何只拍摄部分屏幕的屏幕截图,而不是全部,就像我在这里一样?
答案 0 :(得分:31)
例如,如果您想拍摄高度为UIView
的位置(50,50)
的{{1}}矩形的截屏。
首先将图像上下文设置为矩形的大小。这会设置图像大小。
(100,150)
现在在此上下文中绘制视图,屏幕截图的可见部分从UIGraphicsBeginImageContextWithOptions(CGSizeMake(100,150), false, 0);
开始
(50,50)
这会剪切self.view.drawViewHierarchyInRect(CGRectMake(-50,-50,view.bounds.size.width,view.bounds.size.height) afterScreenUpdates: true)
处的屏幕截图,因为我们设置了(100,150)
的尺寸。现在从中获取UIImage。
context
答案 1 :(得分:0)
我认为这是拍摄部分屏幕的最佳答案:
func screenShot() {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.frame.size.width*0.99,self.frame.size.height*0.70), false, 0)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
self.view?.drawViewHierarchyInRect(CGRectMake(-01, -01, self.frame.size.width, self.frame.size.height), afterScreenUpdates: true)
var screenShot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
答案 2 :(得分:0)
要对包含UIVisualEffect(Blur / Vibrancy)的视图进行快照,请在此处查看我的解决方案:https://stackoverflow.com/a/33633386/802196
答案 3 :(得分:0)
用于按快照选择另一个UIView的区域
// viewObject: UIView linked from storyboard
var bounds= CGRect(x: -viewObject.frame.minX,y: -viewObject.frame.minY,width: view.bounds.size.width,height: view.bounds.size.height)
UIGraphicsBeginImageContext(viewObject.frame.size)
view.drawHierarchy(in: bounds, afterScreenUpdates: true)
let outputImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()