2017-09-28 2 views
0

J'essaie de faire une capture d'écran (après un appui sur un bouton) de seulement la moitié de la taille de viewController (positionnée juste au milieu).Swift: Comment faire une capture d'écran de seulement la moitié de la vue?

Je sais que je peux prendre une capture d'écran de la vue tout comme ceci:

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, true, 0.0) 
    self.view.drawHierarchy(in: self.view.frame, afterScreenUpdates: false) 
    let img = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

Je l'ai regardé à travers stackoverflow, mais il ne fonctionne toujours pas.

Cela, par exemple, ne fonctionne pas avec ces messages d'erreur:

UIGraphicsBeginImageContextWithOptions(CGSize(100, 100), false, 0); 

erreur: étiquettes '(_ :, _ :)' Argument ne correspondent pas disponible surcharge

self.view.drawViewHierarchyInRect(CGRect(-50,-5-,view.bounds.size.width,view.bounds.size.height), afterScreenUpdates: true) 

Erreur: Les étiquettes d'argument '(_ :, _ :, _ :, _ :)' ne correspondent à aucune surcharge disponible

var image:UIImage = UIGraphicsGetImageFromCurrentImageContext(); 

Comment puis-je créer une capture d'écran de la moitié du viewController?

+2

'CGRectMake' ont été renommés à' CGRect (x:, y: largeur: hauteur:) ' – Tj3n

+0

Merci. J'ai édité la question, maintenant je reçois l'erreur que les étiquettes d'argument (_ :, _ :, _ :, _ :) ne correspondent à aucune surcharge disponible. – RjC

+0

Vous devrez écrire le nom de variable comme 'x: -50, y: -5' .... aussi – Tj3n

Répondre

0

Essayez This.For Swift

extension UIView { 

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

} 

utilisation.

let image = view.screenshot()