J'utilise ce code Swift pour prendre une capture d'écran de mon application:
UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Comment pourrais-je prendre une capture d'écran d'une partie de l'écran, et non de la totalité, comme je le fais ici?
Par exemple, si vous souhaitez prendre la capture d'écran du rectangle UIView
à la position (50,50)
avec une hauteur de (100,150)
.
Commencez par définir le contexte de l'image à la taille du rectangle. Ceci définit la taille de l'image.
UIGraphicsBeginImageContextWithOptions(CGSizeMake(100,150), false, 0);
Dessinez maintenant la vue dans ce contexte de telle sorte que la partie visible de la capture d'écran commence à (50,50)
self.view.drawViewHierarchyInRect(CGRectMake(-50,-50,view.bounds.size.width,view.bounds.size.height) afterScreenUpdates: true)
Cela coupe la capture d'écran sur (100,150)
car nous définissons la taille de notre context
. Maintenant, prenez le UIImage de cela.
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
Je pense que c'est la meilleure réponse pour prendre une photo d'une partie de l'écran:
func screenShot() {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.frame.size.width*0.99,self.frame.size.height*0.70), false, 0)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
self.view?.drawViewHierarchyInRect(CGRectMake(-01, -01, self.frame.size.width, self.frame.size.height), afterScreenUpdates: true)
var screenShot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
Pour capturer une vue contenant un UIVisualEffect (Blur/Vibrancy), consultez ma solution ici: https://stackoverflow.com/a/33633386/802196