ios swift uiview sprite-kit screenshot

ios - Captura de pantalla que aparece en blanco-Swift



uiview sprite-kit (2)

En WWDC 2015, Novedades de UIVisualEffectView, se "pasa por alto" una solución para capturar una captura de pantalla de UIVisualEffectView que contiene una etiqueta de vitalidad y un desenfoque. El problema que a menudo surge es que la API de captura de pantalla de Apple tiende a no capturar el efecto UIVisualEf, lo que resulta en una captura de pantalla de la vista sin el efecto visual. La solución según WWDC 2015 implica capturar la instantánea en la ventana / pantalla; desafortunadamente, no se mostró el código de muestra. Lo siguiente es mi propia implementación:

//create snapshot of the blurView let window = UIApplication.sharedApplication().delegate!.window!! //capture the entire window into an image UIGraphicsBeginImageContextWithOptions(window.bounds.size, false, UIScreen.mainScreen().scale) window.drawViewHierarchyInRect(window.bounds, afterScreenUpdates: true) let windowImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() //now position the image x/y away from the top-left corner to get the portion we want UIGraphicsBeginImageContext(blurView.frame.size) windowImage.drawAtPoint(CGPoint(x: -blurView.frame.origin.x, y: -blurView.frame.origin.y)) let croppedImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext(); //embed image in an imageView, supports transforms. let resultImageView = UIImageView(image: croppedImage)

Nota: Este código de instantánea solo funcionará una vez que se haya llamado a ViewDidAppear.

Hola, estoy haciendo un juego y agregué un botón para compartir. Quiero que el usuario pueda compartir un mensaje, una URL y una captura de pantalla uno al lado del otro en un mensaje. El aspecto de compartir funciona bien y todo se muestra, excepto que la captura de pantalla se muestra en blanco. Este es el código que estoy usando para tomar una captura de pantalla:

let layer = UIApplication.sharedApplication().keyWindow!.layer let scale = UIScreen.mainScreen().scale UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale); layer.renderInContext(UIGraphicsGetCurrentContext()) let screenshot = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil) println("screenshot")

Ayúdame a resolver este problema y asegúrate de hacerlo en el lenguaje Swift. También estoy usando la tecnología SpriteKit si eso marca la diferencia. Soy nuevo en la codificación, así que sea muy claro. ¡Muchas gracias!


actualización: Xcode 8.2.1 • Swift 3.0.2

Debes agregar la declaración de importación y esta extensión a tu escena del juego:

import UIKit

extension UIView { var snapshot: UIImage? { UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0) defer { UIGraphicsEndImageContext() } drawHierarchy(in: bounds, afterScreenUpdates: true) return UIGraphicsGetImageFromCurrentImageContext() } }

let myImage = view?.snapshot