iphone - perro - ¿Cómo hago para dibujar cosas tipo fuera de drawrect?
dibujos para dibujar (4)
Tengo una clase basada en UIView llamada Icon. Allí, quiero tener un código similar a esto:
UIView *finalView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
finalView.backgroundColor = [UIColor redColor];
UIGraphicsBeginImageContext(finalView.bounds.size);
[finalView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
El problema es que no quiero tener que ponerlo en drawRect porque se llama cuando mi aplicación hace que cada icono aparezca en otra vista. ¿Cómo puedo poner este tipo de código en otro lugar en mi clase Icon? Intenté ponerlo en 1 lugar y me dio:
CGContextSaveGState: invalid context 0x0
CGContextSetAlpha: invalid context 0x0
CGContextSaveGState: invalid context 0x0
CGContextSetFillColorWithColor: invalid context 0x0
CGContextAddRect: invalid context 0x0
CGContextDrawPath: invalid context 0x0
CGContextRestoreGState: invalid context 0x0
CGContextRestoreGState: invalid context 0x0
¿Qué hay de ponerlo en initWithFrame :? ¿Eso funcionaría para ti?
Sigue haciendo todo tu dibujo en -drawRect:
Cuando algo cambia y desea que su vista se vuelva a dibujar, se le envía un -setNeedsDisplay
o -setNeedsDisplayInRect:
message.
Tal vez estás buscando UIGraphicsPushContext (contexto)? Puede hacer que su contexto de imagen sea actual para dibujar en cualquier lugar donde UIKit esté disponible. No te olvides de UIGraphicsPopContext () después de tu dibujo.
Asegúrese de que las dimensiones del contexto de la imagen no sean inválidas. Si son, por ejemplo, {0,0}, obtendrás una respuesta NULL que creará el contexto y todas las llamadas que necesiten un contexto de mapa de bits válido te dirán que 0x0 no es un contexto válido.