截图只是屏幕的一部分 – 斯威夫特

我正在使用这个Swift代码截取我的应用程序的屏幕截图:

UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0); self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) var image:UIImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

我如何才能截取屏幕的一部分,而不是所有的,就像我在这里做的?

例如,如果要在高度为(100,150)位置(50,50)处拍摄UIView矩形的屏幕截图。

首先将图像上下文设置为矩形的大小。 这设置图像大小。

 UIGraphicsBeginImageContextWithOptions(CGSizeMake(100,150), false, 0); 

现在在这个上下文中绘制视图, 截图可见部分(50,50)开始,

 self.view.drawViewHierarchyInRect(CGRectMake(-50,-50,view.bounds.size.width,view.bounds.size.height) afterScreenUpdates: true) 

由于我们设置了context的大小,因此剪辑屏幕截图为(100,150) 。 现在从这个UIImage。

 var image:UIImage = UIGraphicsGetImageFromCurrentImageContext(); 

要快照包含UIVisualEffect(Blur / Vibrancy)的视图,请参阅我的解决scheme: https ://stackoverflow.com/a/33633386/802196

我觉得这是最好的答案拍一部分的屏幕:

 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() }