J'ai besoin de capturer un UIView et tous ses sous-vues dans un UIImage. Le problème est qu'une partie de la vue est hors écran, donc je ne peux pas utiliser la fonction de capture d'écran, et quand j'essaie d'utiliser la fonction UIGraphicsGetImageFromCurrentImageContext(), elle ne semble pas capturer les sous-vues. Devrait-il capturer les sous-vues et je fais juste quelque chose de mal? Sinon, y a-t-il un autre moyen d'accomplir cela?Besoin de capturer UIView dans un UIImage, y compris toutes les sous-vues
Répondre
Voulez-vous dire
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer drawInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
ne fonctionne pas? Je suis sûr qu'il doit ...
C'est la bonne façon de procéder:
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, [[UIScreen mainScreen] scale]);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
Cette méthode est une méthode d'extension pour la classe UIImage, et il prendra également soin de faire les regards d'image bon sur tous les futurs appareils haute résolution.
Vraiment fonctionne !!! – AlexeyVMP
J'ai sauvé mon temps :) Merci –
est ici une version 2.x Swift qui devrait fonctionner si vous créez un tableau des UIViews pour s'aplati:
// Flattens <allViews> into single UIImage
func flattenViews(allViews: [UIView]) -> UIImage? {
// Return nil if <allViews> empty
if (allViews.isEmpty) {
return nil
}
// If here, compose image out of views in <allViews>
// Create graphics context
UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, UIScreen.mainScreen().scale)
let context = UIGraphicsGetCurrentContext()
CGContextSetInterpolationQuality(context, CGInterpolationQuality.High)
// Draw each view into context
for curView in allViews {
curView.drawViewHierarchyInRect(curView.frame, afterScreenUpdates: false)
}
// Extract image & end context
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Return image
return image
}
- 1. Ajouter UIView sur toutes les autres vues, y compris StatusBar
- 2. Javascript Détecter toutes les images (y compris asynchrones)
- 3. UIImage de UIView à UIViewController
- 4. UIImage d'une région de UIView
- 5. Y compris les méthodes dans les blocs
- 6. Y compris dll dans l'exe?
- 7. Y compris Javascript dans les pages Web
- 8. Zoom dérangeant dessiné UIImage dans UIView
- 9. Y compris les fichiers source dans C
- 10. multi Y compris un fichier
- 11. Y compris $ variable dans MySQL
- 12. y compris les modules de contrôleur
- 13. Suppression de toutes les traces d'un UIView
- 14. Y compris les données de base dans l'ensemble de l'application
- 15. accès UIView Méthodes de contrôleur/Ajouter UIImage
- 16. Copier une table (y compris les index) dans postgres
- 17. PHP classes et y compris les fichiers
- 18. Comment capturer le contenu d'un UIView et le changer en UIImage?
- 19. Y compris un en-tête DDK Windows
- 20. y compris les identifiants de connexion avec un WebRequest
- 21. Y compris un fichier via variable
- 22. Y compris un fragment de fichier WSX
- 23. Comment pouvez-vous obtenir un enfant ComboBox d'un DataGridView pour traiter toutes les clés, y compris "."?
- 24. y compris dynamiquement les scripts php
- 25. y compris un fichier exe à jar
- 26. Capture tous les liens, y compris la soumission de formulaire
- 27. Y compris .NetFramework dans mon fichier d'installation
- 28. Y compris les Partials, ASP.NET MVC
- 29. Y compris l'extension XPCOM inFirefox
- 30. Y compris les documents complets de LaTeX dans d'autres
Je suppose que puisque chaque 'UIView' est appel basé sur des couches' - [CALayer drawInContext: viewContext] 'pourrait aider. –