Aplanir les sous-vues d'UIViews vers UIImage pour iPhone 3.0
-
07-07-2019 - |
Question
J'ai un UIView qui a plusieurs UIImageViews en tant que sous-vues. Chacune de ces sous-vues a eu différentes transformations affines appliquées. Je voudrais prendre ce qui équivaut à une capture d'écran de mon UIView, le capturant comme un UIImage, ou une autre représentation d'image.
La méthode que j'ai déjà essayée, rendant les calques dans un CGContext avec:
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
ne conserve pas le positionnement ni les autres transformations affines de mes sous-vues.
J'apprécierais vraiment un coup de pied dans la bonne direction.
La solution
Essayez ceci:
UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Autres conseils
Voici une version de Swift 2.x:
// This 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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow