Je me demande comment mon application iPhone peut prendre une capture d'écran d'un fichier spécifique en UIView
tant que fichier UIImage
.
J'ai essayé ce code mais tout ce que j'obtiens est une image vierge.
UIGraphicsBeginImageContext(CGSizeMake(320,480));
CGContextRef context = UIGraphicsGetCurrentContext();
[myUIView.layer drawInContext:context];
UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
myUIView
a des dimensions 320x480 et il a quelques sous-vues. Quelle est la bonne façon de procéder?
ios
objective-c
uiview
screenshot
cduck
la source
la source
Réponses:
Je pense que vous voudrez peut-être
renderInContext
, nondrawInContext
. drawInContext est plus une méthode que vous remplaceriez ...Notez que cela peut ne pas fonctionner dans toutes les vues, en particulier il y a environ un an lorsque j'ai essayé de l'utiliser avec la vue de la caméra en direct, cela ne fonctionnait pas.
la source
iOS 7 a une nouvelle méthode qui vous permet de dessiner une hiérarchie de vues dans le contexte graphique actuel. Cela peut être utilisé pour obtenir une UIImage très rapidement.
J'ai implémenté une méthode de catégorie
UIView
pour obtenir la vue en tant queUIImage
:C'est considérablement plus rapide que la
renderInContext:
méthode existante .Référence: https://developer.apple.com/library/content/qa/qa1817/_index.html
MISE À JOUR POUR SWIFT : Une extension qui fait la même chose:
MISE À JOUR POUR SWIFT 3
la source
Vous devez capturer la fenêtre clé pour une capture d'écran ou un UIView. Vous pouvez le faire dans Retina Resolution à l' aide de UIGraphicsBeginImageContextWithOptions et définir son paramètre d'échelle 0.0f. Il capture toujours en résolution native (retina pour iPhone 4 et versions ultérieures).
Celui-ci fait une capture d'écran en plein écran (fenêtre clé)
Ce code capture un UIView en résolution native
Cela enregistre l'UIImage au format jpg avec une qualité de 95% dans le dossier de documents de l'application si vous devez le faire.
la source
À partir d'iOS7, nous avons ci-dessous les méthodes par défaut:
L'appel de la méthode ci-dessus est plus rapide que d'essayer de rendre vous-même le contenu de la vue actuelle dans une image bitmap.
Si vous souhaitez appliquer un effet graphique, tel qu'un flou, à un instantané, utilisez
drawViewHierarchyInRect:afterScreenUpdates:
plutôt la méthode.https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html
la source
Il y a une nouvelle API d'iOS 10
la source
J'ai créé une extension utilisable pour UIView pour prendre une capture d'écran dans Swift:
Pour l'utiliser, tapez simplement:
la source
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, 0);
plutôt queUIGraphicsBeginImageContext(self.bounds.size);
d'utiliser le bon facteur d'échelle de l'appareil.drawViewHierarchyInRect
place derenderInContext
.Cette méthode peut mettre dans votre classe Controller.
la source
drawRect
ne fait pas partie de UIViewController (IIRC). Il fait partie d'un UIView. Je ne crois pas qu'il sera appelé si c'est dans le contrôleur.Apple nous permet désormais de l'utiliser dans une application publique, même s'il s'agit d'une API privée
la source
Détails
Solution
Usage
Échantillon complet
Résultat
la source
Apple n'autorise pas:
Les applications doivent prendre une capture d'écran en utilisant la
drawRect
méthode spécifiée dans: http://developer.apple.com/library/ios/#qa/qa2010/qa1703.htmlla source
J'ai créé cette extension pour enregistrer une capture d'écran depuis UIView
appeler :
Si vous souhaitez créer un png doit changer:
par
la source
Swift 4 mis à jour:
la source
L'extrait suivant est utilisé pour prendre une capture d'écran:
Utiliser la
renderInContext:
méthode au lieu de ladrawInContext:
méthoderenderInContext:
met le récepteur et ses sous-couches dans le contexte actuel. Cette méthode effectue le rendu directement à partir de l'arborescence des couches.la source
la source
vous pouvez utiliser la catégorie UIView suivante -
la source