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

时间:2012-03-07 21:54:31

标签: iphone objective-c ios uicolor

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

查看截图: Screenshots of issue

还有其他人经历过这个吗?有解决方法吗?

2 个答案:

答案 0 :(得分:12)

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

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

示例:

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

两个视图都显示为黑色,并且似乎存在缓存问题,其中图像的所有其他用途都会在应用程序暂停/恢复之前呈现黑色。

我向Apple提交了问题#10795514以报告此问题,但看起来它变成了5.1。可以通过以下方式减少此问题:http://iccir.com/public/radar/Radar10795514.zip

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

答案 1 :(得分:0)

我在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中对此进行了测试,因此如果您遇到问题,它也应该适用于iPhone。