visual studio microsoft español descargar community ios uiview uiimage core-graphics loadnibnamed

ios - studio - Tome una instantánea de la vista sin agregarla a la pantalla



visual studio installer (3)

Intento cargar una vista desde una punta, configurarla y tomar una instantánea de ella, sin agregarla a la pantalla:

+ (void)composeFromNibWithImage:(UIImage*)catImage completion:(CompletionBlock)completion { NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"CatNib" owner:nil options:nil]; CatView *catView = [nibContents firstObject]; //here, catView is the correct size from the nib, but is blank if inspected with the debugger catView.catImageView.image = catImage; catView.furButton.selected = YES; UIImage *composite = [UIImage snapshot:catView]; completion(composite); }

donde la instantánea es la típica:

+ (UIImage *)snapshot:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }

Sin embargo, tanto catView como composite tienen el tamaño correcto pero en blanco a medida que paso por el código. ¿Cómo puedo crear un UIImage desde una vista que se carga desde un plumín, sin agregar la vista a la pantalla?


Esto se siente un poco raro, pero lo intenté y hace el trabajo. Si carga la vista desde su plumilla detrás de la vista principal, puede tomar una captura de pantalla de esa capa. Siempre que no se trate de una vista intensiva de memoria, el usuario nunca sabría que la vista se agregó a la vista superior.

UIGraphicsBeginImageContext(CGSizeMake(catView.frame.size.width, catView.frame.size.height)); CGContextRef context = UIGraphicsGetCurrentContext(); [catView.layer renderInContext:context]; UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

Entonces ejecuta este código después de cargar tu plumín detrás de tu vista principal. Una vez que está cargado, puedes eliminarlo con `[catView removeFromSuperiew] ''


Tuve un problema similar hace algún tiempo, y hasta donde puedo decir que no es posible tomar una instantánea de una vista, eso no está realmente en la pantalla. Creé una solución y coloqué la vista en cuestión, que quería capturar, fuera de los límites de vista ViewControllers actuales, para que no la vea. En este caso, fue posible crear una instantánea válida. Espero que esto ayude :)


UIGraphicsBeginImageContext(view.frame.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();