Saltar al contenido

¿Cómo tomar una captura de pantalla de una UIView en Swift?

Solución:

Para dibujar una vista, simplemente use esto:

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

Si desea usarlo varias veces, probablemente la extensión haría el trabajo:

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

// Viejo vencejo

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

Para explicar qué hacen esos parámetros:

UIGraphicsBeginImageContextWithOptions () crea un contexto de representación temporal en el que se dibuja el original. El primer argumento, tamaño, es el tamaño de destino de la imagen escalada. El segundo argumento, isOpaque, se usa para determinar si se representa un canal alfa. Establecer esto en falso para imágenes sin transparencia (es decir, un canal alfa) puede resultar en una imagen con un tono rosado. La escala del tercer argumento es el factor de escala de visualización. Cuando se establece en 0.0, se usa el factor de escala de la pantalla principal, que para las pantallas Retina es 2.0 o superior (3.0 en el iPhone 6 Plus).

Más sobre esto aquí http://nshipster.com/image-resizing/

En cuanto a la llamada de sorteo, Apple Docs lo explica con detalle aquí y aquí.

swift 4 y iOS 10+

extension UIView {

  func screenshot() -> UIImage {
    return UIGraphicsImageRenderer(size: bounds.size).image { _ in
      drawHierarchy(in: CGRect(origin: .zero, size: bounds.size), afterScreenUpdates: true)
    }
  }

}

Una alternativa a la respuesta de Alessandro, un poco más breve y con estilo Swift:

extension UIView {

    var snapshot: UIImage {
        return UIGraphicsImageRenderer(size: bounds.size).image { _ in
            drawHierarchy(in: bounds, afterScreenUpdates: true)
        }
    }

}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *