web-dev-qa-db-fra.com

Capture d'écran seulement une partie de l'écran - Swift

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?

14
tdh

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();
30
rakeshbs

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()
}
0
Rex

Pour capturer une vue contenant un UIVisualEffect (Blur/Vibrancy), consultez ma solution ici: https://stackoverflow.com/a/33633386/802196

0
ObjectiveTC