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

时间:2015-01-16 01:26:18

标签: ios swift screenshot fullscreen

我正在使用此Swift代码截取我的应用的截图:

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

UIGraphicsEndImageContext();

我如何只拍摄部分屏幕的屏幕截图,而不是全部,就像我在这里一样?

4 个答案:

答案 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()