iOS 5.1: – 背景颜色绘制纯黑色

在今天发布的iOS 5.1 GM中testing我的应用程序时,我注意到我的一些视图正在绘制纯黑色,而不是其图案化的背景色。 在以前的iOS版本上完全相同的代码工作正常(在4.2 – 5.0.1testing)。

查看截图: 问题的屏幕截图

有没有人经历过这个? 有没有解决方法?

回答我自己的问题(花了我几天的时间来debugging,所以希望这会节省一些人的一些时间;)):

根本原因涉及在具有相同图像的UIImageView上方的UIView上使用图案化的UIColor(通过+[UIColor colorWithPatternImage:] )作为背景颜色。

例:

  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]; 

两个视图都绘制成黑色,并且在应用程序暂停/恢复之前,图像的所有其他用途都将呈现黑色,这似乎是一个caching问题。

我向苹果提交了问题#10795514来报告这个问题,但是看起来它已经变成了5.1。 这个问题的减less可以在http://iccir.com/public/radar/Radar10795514.zip

我发现唯一的解决方法是平视图层次结构并在相同的视图中两次绘制模式图像。

我在iPad上遇到了iOS 5.1的问题,我在这样的UIScrollView上使用了colorWithPatternImage:

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

这适用于iOS 6(例如iPad2及更高版本),但是在原始iPad上,只能将iOS更新到5.1.1,则会显示白色或其他纯色。 解决方法是使用一个稍微有吸引力的方法,你设置scrollView的backgroundView像这样:

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

我已经在iOS 6和iOS 5.1中testing过了,所以如果你遇到问题,它也应该适用于iPhone。