backgroundColor colorWithPatternImage termina estirado si cambia el tamaño de la vista, en lugar de repetir?

StackOverflow https://stackoverflow.com/questions/1418735

  •  07-07-2019
  •  | 
  •  

Pregunta

Estoy configurando un fondo de vista para una imagen repetida usando colorWithPatternImage. Si el tamaño de la vista cambia después de configurar el fondo por primera vez, la imagen se estira en lugar de repetir para el nuevo tamaño. ¿Alguna idea de cómo puedo solucionarlo?

Esto es lo que estoy haciendo:

  • establece el fondo de la vista en viewDidLoad:

    frameView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @ " frame-repeat.png "]];

  • toma alguna información del servidor, actualiza la vista, cambia el tamaño del marco de la vista para que se ajuste al nuevo contenido (generalmente, esto significa hacer que la vista sea más alta)

  • la imagen de fondo ahora se estira, incluso si configuro el backgroundColor nuevamente usando exactamente el mismo código.

Si no hago el conjunto de fondo inicial, y solo lo configuro después de recuperar los datos del servidor y cambiar el tamaño de la vista, se ve muy bien: se repite y no se estira. Sin embargo, eso significa que no hay fondo mientras se cargan los datos ... se ve feo.

¿Alguien más se ha encontrado con esto?

¡Gracias por cualquier ayuda!

¿Fue útil?

Solución

La respuesta es bastante simple, solo llame

[[self view] setNeedsDisplay];

en el controlador cuando cambia el tamaño del marco (o donde sea que lo haga, la línea de fondo es enviar un mensaje setNeedsDisplay a la vista después del cambio de marco). Si esto no funciona, intente configurar el color de fondo.

Y si esto no funciona, implemente su propia vista personalizada y anule el método

- (void) drawRect:(CGRect) rect {
   CGRect myBounds = self.bounds;
   CGContextRef context = UIGraphicsGetCurrentContext();
   [[UIColor colorWithPatternImage:[UIImage imageNamed:@"frame-repeat.png.png"]]set];
   CGContextFillRect(context, myBounds);
}

Y luego, después del cambio de tamaño, envíe setNeedsDisplay a su vista. Esto funcionará al 100%.

Espero que esto haya sido útil, Pawel

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top