que framework iphone uiview rendering

iphone - framework - uikit ios



Renderizar UIView con sus hijos (2)

Tengo una UIView que tiene una imagen y algunos botones como sus subvistas. Me gustaría obtener una imagen de "instantánea" de ella usando renderInContext u otro método.

[clefView.layer renderInContext:mainViewContentContext];

Si paso mi UIView (como arriba) entonces obtengo un mapa de bits en blanco. Ninguno de los niños se representa en el mapa de bits.

Si le paso la vista secundaria que es la imagen, entonces obtengo una imagen de ese mapa de bits, y, como era de esperar, ninguno de sus hermanos (botones).

Esperaba que renderInContext tomara la imagen y todos sus elementos renderInContext visibles y los convirtiera en un mapa de bits. ¿Alguien tiene alguna idea de cómo hacer esto?


Pruebe algo como esto:

UIGraphicsBeginImageContext(clefView.bounds.size); [clefView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();


La versión simple de 4 líneas no funcionó para mí. Tengo un UIView (con subcapas) y un niño UITextView. Puedo renderizar UIView en UIImage OK, pero el niño UITextView no se procesa.

Mi solución simple es la siguiente:

CGRect rect = [view bounds]; UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0f); CGContextRef context = UIGraphicsGetCurrentContext(); [view.layer renderInContext:context]; for (UIView *sv in view.subviews) { CGContextTranslateCTM(context, sv.frame.origin.x, sv.frame.origin.y); [sv.layer renderInContext:context]; CGContextTranslateCTM(context, -sv.frame.origin.x, -sv.frame.origin.y); } UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

Tenga en cuenta que el uso simple de CGContextTranslateCTM supone que las vistas secundarias no tienen ninguna transformación que no sea la de traducción. También asumo que las vistas secundarias están completamente contenidas dentro del marco de vista principal.