2012-03-07 9 views
8

Al probar mi aplicación en el lanzamiento de iOS 5.1 GM, noté que algunas de mis vistas están dibujando un negro sólido en lugar de su color de fondo estampado. El mismo código funciona bien en versiones anteriores de iOS (probado en 4.2 - 5.0.1).iOS 5.1: - [UIColor colorWithPatternImage:] color de fondo dibuja negro

Ver imágenes: Screenshots of issue

Ha nadie más ha experimentado esto? ¿Hay alguna solución?

Respuesta

12

responder a mi propia pregunta (me tomó unos días para depurar este, así que espero que esto ahorra a otra persona algún tiempo;)):

La causa raíz implica el uso de un UIColor modelado (a través de +[UIColor colorWithPatternImage:]) como fondo color en una UIView que está encima de una UIImageView con la misma imagen.

Ejemplo:

UIImageView *imageView = [[UIImageView alloc] initWithImage:anImage]; 
    [_containerView addSubview:imageView]; 

    UIColor *patternColor = [UIColor colorWithPatternImage:anImage]; 
    UIView *patternView = [[UIView alloc] initWithFrame:frame]; 
    [patternView setBackgroundColor:patternColor]; 
    [_containerView addSubview:patternView]; 

Ambos puntos de vista se basan negro, y no parece ser un problema de almacenamiento en caché en el que todos los otros usos de la imagen dibuja negro hasta que se suspende la aplicación/reanudó.

He archivado el problema # 10795514 con Apple para informar esto, pero parece que ha llegado a 5.1. Una reducción de este problema está disponible en: http://iccir.com/public/radar/Radar10795514.zip

La única solución que encontré fue aplanar la jerarquía de vistas y dibujar la imagen del patrón dos veces en la misma vista.

+1

+1 - ¡Gracias por compartir! – Till

+0

El problema real es colorWithPatternImage no se aplica a UIImageView en ios5, debería estar usando un UIView aparentemente .... – anders

0

que estaba teniendo este problema con iOS 5.1 en un IPAD donde yo estaba usando colorWithPatternImage en un UIScrollView como esto:

scrollView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YOURIMAGE.jpg"]]; 

Esto funciona en iOS 6 (por ejemplo iPad2 y más allá), sin embargo, en un original iPad, donde solo puede actualizar su iOS a 5.1.1, esto mostrará blanco u otro color sólido que haya definido en algún lugar. La solución es utilizar un método ligeramente menos atractivo donde se establece el backgroundView del ScrollView así:

scrollView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YOURIMAGE.png"]]; 

He probado esto en iOS 6 y el IOS 5.1, por lo que también debe aplicarse al iPhone si Se está metiendo en problemas allí.

Cuestiones relacionadas