2017-03-14 1 views
0

J'ai un TableView qui présente un PickerViewController sur un ViewController. Le ViewController affiche des images et un bouton plutôt que de déclencher une action. Je veux que cette action prenne une capture d'écran comme la capture d'écran fournie par Apple. Voici mon code:Comment faire une capture d'écran d'un pickerViewController et UIView?

@IBAction func share(){ 

UIGraphicsBeginImageContext(view.frame.size) 
    UIGraphicsBeginImageContext(thePicker.view.frame.size) 
    view.layer.render(in: UIGraphicsGetCurrentContext()!) 
    thePicker.view.layer.render(in: UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    let activity = UIActivityViewController(activityItems: [image], applicationActivities: nil) 
    present(activity, animated: true, completion: nil) 
} 

This image is the result of using the screenshot provided by Apple (side + home button)This image is result of my code

+0

Partager capture d'écran du contrôleur de vue. –

+0

Rechercher 'Capture d'écran UIView.' –

+0

@RajeshkumarR Je viens de partager les images. –

Répondre

1

vous devriez écrire une extension pour la valeur de retour de vue screenshot.Extension est UIImage.You peut imprimer UIImage à UIImageView. Aussi, si vous le souhaitez, vous pouvez appeler ici une action sur un bouton.

import UIKit 


class VideoContentController: UIViewController{ 
     override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     self.viewScreenShot() 
    } 
    func viewScreenShot() 
    { 
    let image = self.youtView.takeScreenShot() 
    self.yourImageView.image = image 
    } 


}  

extension UIView { 

     func takeScreenShot() -> UIImage { 
      UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale) 

      drawHierarchy(in: self.bounds, afterScreenUpdates: true) 

      // old style: layer.renderInContext(UIGraphicsGetCurrentContext()) 

      let image = UIGraphicsGetImageFromCurrentImageContext() 
      UIGraphicsEndImageContext() 
      return image! 
     } 
    } 

en profiter :)

+0

Ça ne marche pas ... J'ai le même résultat. –

+0

J'utilise mon projet de partage facebook.Quel code ne fonctionne pas @MarcoGonzalez –

+0

Le code peut faire une capture d'écran, mais seulement du contrôleur View et j'ai besoin d'une capture d'écran du View Controller et du PickerViewController. Je poste juste les photos sur ma question originale. –

2
func ScreenCapturing() 
{ 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale) 
    view.layer.render(in: UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
} 
+1

Veuillez fournir quelques explications afin que l'affiche et les autres puissent comprendre votre solution. –

+0

Ça ne marche pas. J'ai obtenu le même résultat. = ( –