iOS 5.1: - [UIColor colorWithPatternImage:]背景颜色绘制纯黑色

icc*_*cir 8 iphone objective-c uicolor ios

在今天发布的iOS 5.1 GM中测试我的应用程序时,我注意到我的一些视图是绘制纯黑色而不是图案背景颜色.完全相同的代码在以前的iOS版本上运行良好(在4.2 - 5.0.1上测试).

查看截图: 问题截图

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

icc*_*cir 12

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

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

例:

    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];
Run Code Online (Sandbox Code Playgroud)

两个视图都绘制为黑色,并且似乎存在缓存问题,其中图像的所有其他用途都将呈现黑色,直到应用程序暂停/恢复为止.

我向Apple提交了问题#10795514来报告这个问题,但看起来它已经变成了5.1.有关此问题的减少,请访问:http://iccir.com/public/radar/Radar10795514.zip

我发现的唯一解决方法是展平视图层次结构并在同一视图中绘制两次图案图像.