Capture d'une capture d'écran complète avec une barre d'état dans iOS par programmation
Je suis en utilisant ce code pour capturer une capture d'écran et l'enregistrer dans l'album photo.
-(void)TakeScreenshotAndSaveToPhotoAlbum
{
UIWindow *window = [UIApplication sharedApplication].keyWindow;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(window.bounds.size, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(window.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
Mais le problème est que chaque fois que la capture d'écran est enregistrée, je vois la barre d'état de l'iPhone n'est pas capturé. Au lieu d'un espace blanc s'affiche en bas. Comme l'image suivante:
Ce que je fais mal?
source d'informationauteur Umair Khan Jadoon
Vous devez vous connecter pour publier un commentaire.
La barre d'état est en fait dans sa propre UIWindow, dans votre code, vous ne sont que le rendu de la vue de votre viewcontroller qui ne comprennent pas cela.
La "officielle" de la méthode des captures d'écran a été icimais semble maintenant avoir été retiré par Apple, probablement parce qu'elle est obsolète.
Sous iOS 7, il y a maintenant une nouvelle méthode de
UIScreen
pour obtenir une vue soutenant le contenu de la totalité de l'écran:Cela vous donnera un point de vue qui vous pouvez manipuler à l'écran pour divers effets visuels.
Si vous voulez dessiner la vue de la hiérarchie dans un contexte, vous avez besoin d'itérer à travers les fenêtres de l'application (
[[UIApplication sharedApplication] windows]
) et d'appeler cette méthode sur chacun d'eux:Vous peut être en mesure de combiner les deux approches ci-dessus et de prendre l'instantané de la vue, puis utilisez la méthode ci-dessus sur l'instantané de la dessiner.
"Officiel" capture d'écran de la méthode ne tient pas compte de barre d'état (il n'est pas dans la liste des fenêtres de l'application). Testé sur iOS 5.
Je crois, c'est pour des raisons de sécurité, mais il n'y a aucune mention de cela dans les docs.
Je suggère deux options:
Voici mon code pour prendre une capture d'écran et l'enregistrer comme NSData (à l'intérieur d'une IBAction). Avec le sotred NSData ensuite, vous pouvez partager ou e-mail ou ce que voulez faire
Réponse à la question ci-dessus pour
Objective-C
est déjà y écrire, voici leSwift
version de réponse à la question ci-dessus.Pour Swift 3+
Prendre une capture d'écran et ensuite l'utiliser pour afficher quelque part ou à envoyer sur le web.
Utilisation de l'écran ci-dessus,
Permet d'afficher au-dessus de capture d'écran sur UIImageView
Obtenir des Données d'image à enregistrer/envoyer sur le web
Les ouvrages suivants, pour moi, la capture de la barre d'état de l'amende (iOS 9, Swift)