una tus subir sobre requisitos publicar posterior para leyes las gratis falta exportación envía documentación cumplimiento con compilaciones como colocar application apple app aplicacion ios iphone image swift screenshot

tus - Captura de pantalla en Swift iOS?



subir aplicacion a ios (4)

// La captura de pantalla para compartir en Facebook o Twitter es así ...

func shareButtonClickedToTwitter(){ UIGraphicsBeginImageContextWithOptions(CGSizeMake(320,320), false, 0) var image:UIImage = UIGraphicsGetImageFromCurrentImageContext(); self.view?.drawViewHierarchyInRect(CGRectMake(-30, -30, self.frame.size.width, self.frame.size.height), afterScreenUpdates: true) var screenShot = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() self.vc.showTWShare("I scored /(score) in Beanystalk can you do better? Available in App Store..", shareImage: screenShot)} func shareButtonClickedToFaceboook() { UIGraphicsBeginImageContextWithOptions(CGSizeMake(320,320), false, 0) var image:UIImage = UIGraphicsGetImageFromCurrentImageContext(); self.view?.drawViewHierarchyInRect(CGRectMake(-30, -30, self.frame.size.width, self.frame.size.height), afterScreenUpdates: true) var screenShot = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() self.vc.showFbShare("I got /(score) Points whilst playing BeanyStalk! Can you beat me?..", shareImageF: screenShot) }

// función para compartir en facebook.

func showFbShare(messageFB: String , shareImageF: UIImage) { println(messageFB) if SLComposeViewController.isAvailableForServiceType(SLServiceTypeFacebook){ var fbSheet = SLComposeViewController(forServiceType: SLServiceTypeFacebook) fbSheet.completionHandler = { result in switch result { case SLComposeViewControllerResult.Cancelled: break case SLComposeViewControllerResult.Done: break } } fbSheet.addImage(shareImageF) fbSheet.setInitialText("/(messageFB) Click here to fun https://hereIsLink/") println(messageFB) self.presentViewController(fbSheet, animated: false, completion: { }) } else { var alert = UIAlertController(title: "Accounts", message: "Please login to a facebook account to share.", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } }

// Twitter Share function

func showTWShare(message: String , shareImage: UIImage) { println(message) if SLComposeViewController.isAvailableForServiceType(SLServiceTypeTwitter){ var twSheet = SLComposeViewController(forServiceType: SLServiceTypeTwitter) twSheet.completionHandler = { result in switch result { case SLComposeViewControllerResult.Cancelled: break case SLComposeViewControllerResult.Done: break } } twSheet.setInitialText("/(message) Click here 2 fun https://hereIsLink/") //The default text in the tweet twSheet.addImage(shareImage) println(message) self.presentViewController(twSheet, animated: false, completion: { }) } else { var alert = UIAlertController(title: "Accounts", message: "Please login to a Twitter account to share.", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } }

¿Cómo puedo tomar una captura de pantalla de mi pantalla por código (en Swift) y guardarla? ¿Puedo tomar una captura de pantalla y guardarla como imagen?

He mirado y veo este código, pero no puedo usarlo (creo) porque no hace nada.

var screen = UIScreen.mainScreen() snapshotVieww = screen.snapshotViewAfterScreenUpdates(false) UIGraphicsBeginImageContextWithOptions(screen.bounds.size, false, 0) snapshotVieww.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) var image:UIImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() provino = UIImageView(image: image)


Con Swift 4 / iOS 10.3, puede elegir una de las siguientes formas para resolver su problema.

1. Tome una captura de pantalla de la vista de un controlador de vista

El siguiente código muestra cómo tomar una captura de pantalla y guardarla en el álbum de fotos del dispositivo:

import UIKit class ViewController: UIViewController { /* ... */ @IBAction func screenshot(_ sender: UIBarButtonItem) { //Create the UIImage UIGraphicsBeginImageContextWithOptions(view.frame.size, true, 0) guard let context = UIGraphicsGetCurrentContext() else { return } view.layer.render(in: context) guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return } UIGraphicsEndImageContext() //Save it to the camera roll UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) } }

Tenga en cuenta que el resultado de este código será una imagen .JPG. También tenga en cuenta que la barra de navegación y la barra de estado no aparecerán en la imagen final.

Desde iOS 10, como alternativa al código anterior, puedes usar el siguiente código:

import UIKit class ViewController: UIViewController { /* ... */ @IBAction func screenshot(_ sender: UIBarButtonItem) { //Create the UIImage let renderer = UIGraphicsImageRenderer(size: view.frame.size) let image = renderer.image(actions: { context in view.layer.render(in: context.cgContext) }) //Save it to the camera roll UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) } }

2. Tome una captura de pantalla de una ventana de iPhone

Si desea tomar una captura de pantalla que incluya la barra de navegación (pero no la barra de estado), puede usar el siguiente código:

import UIKit class ViewController: UIViewController { /* ... */ @IBAction func screenshot(_ sender: UIBarButtonItem) { //Create the UIImage guard let layer = UIApplication.shared.keyWindow?.layer else { return } UIGraphicsBeginImageContextWithOptions(layer.frame.size, true, 0) guard let context = UIGraphicsGetCurrentContext() else { return } layer.render(in: context) guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return } UIGraphicsEndImageContext() //Save it to the camera roll UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) } }

Desde iOS 10, como alternativa al código anterior, puedes usar el siguiente código:

import UIKit class ViewController: UIViewController { /* ... */ @IBAction func screenshot(_ sender: UIBarButtonItem) { //Create the UIImage guard let layer = UIApplication.shared.keyWindow?.layer else { return } let renderer = UIGraphicsImageRenderer(size: layer.frame.size) let image = renderer.image(actions: { context in layer.render(in: context.cgContext) }) //Save it to the camera roll UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) } }

Recordatorio

Desde iOS 10, para evitar que su aplicación se bloquee al llamar a su método de screenshot(_:) , debe agregar la clave NSPhotoLibraryUsageDescription al archivo NSPhotoLibraryUsageDescription de su proyecto:

<key>NSPhotoLibraryUsageDescription</key> <string>Some description to explain why access is required</string>


Para tomar una captura de pantalla, la respuesta de Imanou Petit es muy buena. He tratado con las múltiples versiones de iOS y tvOS en una sola extensión, y lo he hecho disponible como un pod ( pod ''SwiftImageEffects'' ).

Código completo a continuación (de https://github.com/Coeur/ImageEffects/blob/master/SwiftImageEffects/ImageEffects%2Bextensions.swift ):

extension UIView { /// Get a UIImage from the UIView /// - parameter opaque: /// A Boolean flag indicating whether the image is opaque. Specify true to ignore the alpha channel. Specify false to handle any partially transparent pixels. /// - parameter scale: /// The scale factor to apply to the image. If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen. open func renderImage(opaque: Bool = false, scale: CGFloat = 0) -> UIImage { if #available(iOS 10.0, tvOS 10.0, *) { let format = UIGraphicsImageRendererFormat.default() format.opaque = opaque format.scale = scale return UIGraphicsImageRenderer(size: bounds.size, format: format).image { layer.render(in: $0.cgContext) } } else { // Fallback on earlier versions // The following methods will only return a 8-bit per channel context in the DeviceRGB color space. // Any new bitmap drawing code is encouraged to use UIGraphicsImageRenderer in lieu of this API. UIGraphicsBeginImageContextWithOptions(bounds.size, opaque, scale) defer { UIGraphicsEndImageContext() } layer.render(in: UIGraphicsGetCurrentContext()!) return UIGraphicsGetImageFromCurrentImageContext()! } } }

Entonces puede tomar una captura de pantalla tan simple como:

func screenshot() { if let image = UIApplication.shared.keyWindow?.renderImage() { // saving will require a NSPhotoLibraryUsageDescription in your project''s Info.plist UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) } }


Solo estas pocas líneas de código obtendrán la captura de pantalla de la vista: (solo probado)

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