当前位置: 首页 > 面试题库 >

如何快速获取UIView的屏幕截图?

施令雪
2023-03-14
问题内容

我有一个名为overView的UIView:

overView.frame = CGRectMake(self.view.frame.width/25, self.view.frame.height/25, self.view.frame.width/1.3, self.view.frame.height/1.2)

我只想截取此视图的屏幕截图,而不是整个屏幕。并制作尺寸截图:

 (CGSizeMake(2480,3508 )

这是我的代码:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(2480,3508 ), false, 0);
self.view.drawViewHierarchyInRect(CGRectMake(-self.view.frame.width/25, -self.view.frame.height/25,2480,3508), afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext()

屏幕截图具有所需的大小,但是它需要整个视图的屏幕截图,而不仅仅是“ overView”。


问题答案:

要绘制一个视图,只需使用以下命令:

    // Begin context
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.mainScreen().scale)

    // Draw view in that context
    drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)

    // And finally, get image
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

如果您想多次使用它,可能扩展可以完成这项工作:

// Swift4

extension UIView {

    func takeScreenshot() -> UIImage {

        // Begin context
        UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale)

        // Draw view in that context
        drawHierarchy(in: self.bounds, afterScreenUpdates: true)

        // And finally, get image
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        if (image != nil)
        {
            return image!
        }
        return UIImage()
    }
}

//旧的Swift

extension UIView {

    func takeScreenshot() -> UIImage {

        // Begin context
        UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.mainScreen().scale)

        // Draw view in that context
        drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)

        // And finally, get image
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image
    }
}

要解释这些参数的作用:

UIGraphicsBeginImageContextWithOptions()创建一个临时渲染上下文,在其中绘制原始文档。第一个参数size是缩放图像的目标大小。第二个参数isOpaque用于确定是否渲染Alpha通道。对于不透明的图像(即Alpha通道),将其设置为false可能导致图像具有粉红色的色调。第三个参数比例是显示比例因子。设置为0.0时,将使用主屏幕的比例因子,对于Retina显示屏,该比例因子为2.0或更高(iPhone
6 Plus为3.0)。

有关此的更多信息,请参见http://nshipster.com/image-resizing/

至于抽奖电话,Apple Docs
在此处和此处详细解释



 类似资料:
  • 问题内容: 我希望用户在Swift中以编程方式按下按钮后继续运行我的应用并为应用截图。我知道需要截图,但是我不需要整个屏幕的图片。我希望弹出一个矩形(有点像裁剪工具),并且用户可以拖动矩形并调整其大小以仅截取屏幕的特定部分的屏幕截图。我希望矩形经过a 并裁剪Web视图的图片。 问题答案: 标准的快照技术是,将其绘制到图像上下文。在iOS 10及更高版本中,您可以使用: 而且您会这样使用: 在iOS

  • 我需要在应用程序最小化时获得一个屏幕截图 这段代码是从应用程序activity的rootView中抓取的截图: 如何从显示获得截图,而不是从activity视图?

  • 问题内容: 我只需要当前视口的屏幕截图,尤其要注意滚动位置。基本上是当前Chrome驱动程序的功能。 从我所阅读的内容看来,这应该是完全可能的,但是由于某些原因,screenshot命令始终努力获取完整的文档截图。实际上,IE驱动程序会拍摄多个视口镜头,然后将它们缝合在一起。 我使用的是Ruby Webdriver,无论如何我都看不到仅截取视口的屏幕截图。可能吗? 问题答案: 在处理WebDriv

  • 我有一个有30行的tableView,我还有一个位于tableView顶部的视图(不在tableView标题中),我想捕获屏幕的完整屏幕截图,包括视图和tableView的所有行,但我只能捕获tableView和视图的可见行。请帮助我,提前谢谢。这是我的代码和模拟器的屏幕截图。注意(我不希望我的视图位于tableview标题中,因为当我们滚动tableview时,它也会滚动,这就是为什么视图是固定

  • 问题内容: 我怎样才能获得的所有窗口的列表,当前在屏幕上,在 迅速 ?(所有示例均以开头) 在 Objective-C中, 我可以成功运行以下代码: 但是当我 迅速 运行等效项时(使用操场进行测试): 我收到一个错误消息,告诉我我有一个。 在石英文档的帮助下玩了一段时间之后,我开始: 但是它仍然无法正常工作,因为我正在接收一个我不知道如何访问的对象。 我是在正确的道路上还是在做根本上错误的事情?

  • 我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码: