【发布时间】:2014-08-25 06:21:05
【问题描述】:
我从NSMutableArray、rainbowArray 为UICollectionView 的单元格提供背景颜色,使用very elegant code from BJ Homer 填充UIColors:
float INCREMENT = 0.04;
for (float hue = 0.0; hue < 1.0; hue += INCREMENT)
{
UIColor *color = [UIColor colorWithHue:hue
saturation:1.0
brightness:1.0
alpha:1.0];
[rainbowArray addObject:color];
NSLog(@"color in rainbow is %@",color);
}
效果很好! NSLog'doutput 证明颜色在那里。然而,当我实际将颜色应用到我的UICollectionViewCells 时,NSLogs 表明颜色已经以某种方式变回colorWithHue 的值1 0 0 1。
这是来自我的 cellForItemAtIndexPath 的代码,因为我在两个 CV 之间共享我的委托方法而进行了简化:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
if (collectionView == self.usedColorsCollectionView)
{
...
}
else if (collectionView == self.pickerCollectionView)
{
static NSString *cellIdentifier = @"pickerCell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
for (UIColor *thisColor in rainbowArray)
{
NSLog(@"Somehow color has changed to %@, and is being applied to cell",thisColor);
[cell setBackgroundColor:thisColor];
[cell.layer setCornerRadius:18.0f];
[cell setUserInteractionEnabled:YES];
return cell;
}
}
return 0;
}
这里是日志,也是简化的,首先是它们被创建并插入数组时的值:
2014-08-24 22:38:24.936 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 1 0 0 1
2014-08-24 22:38:24.937 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 1 0.24 0 1
2014-08-24 22:38:24.938 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 1 0.48 0 1
2014-08-24 22:38:24.939 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 1 0.72 0 1
2014-08-24 22:38:24.940 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 1 0.96 0 1
2014-08-24 22:38:24.940 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 0.8 1 0 1
2014-08-24 22:38:24.941 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 0.56 1 0 1
2014-08-24 22:38:24.941 WMDGx[26662:90b] color in rainbow is UIDeviceRGBColorSpace 0.32 1 0 1
...
以下是应用于单元格时的值:
2014-08-24 22:38:24.959 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.960 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.961 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.961 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.962 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.963 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.964 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.964 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.965 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.965 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
2014-08-24 22:38:24.966 WMDGx[26662:90b] Somehow color has changed to UIDeviceRGBColorSpace 1 0 0 1, and is being applied to cell
这是结果的截图:
有问题的单元格是大红色的,应该是多色的。
我已经尝试了好几个小时来解决这个问题。有什么想法吗?
编辑:
全部修复!我使用了@Paulw11 提供的代码,但也要感谢@Shan 和@Ramshad 提供的一些语法,因为我不熟悉它。
现在是这样的:
在我添加此代码 (posted by @neilsbot in this answer) 以充实颜色数组后,现在包含 68 个颜色孔。
float INCREMENT = 0.06;
for (float hue = 0.0; hue < 1.0; hue += INCREMENT)
{
UIColor *color = [UIColor colorWithHue:hue
saturation:1.0
brightness:1.0
alpha:1.0];
CGFloat oldHue, saturation, brightness, alpha ;
BOOL gotHue = [color getHue:&oldHue saturation:&saturation brightness:&brightness alpha:&alpha ];
if (gotHue)
{
UIColor * newColor = [ UIColor colorWithHue:hue saturation:0.7 brightness:brightness alpha:alpha ];
UIColor * newerColor = [ UIColor colorWithHue:hue saturation:0.5 brightness:brightness alpha:alpha ];
UIColor * newestColor = [ UIColor colorWithHue:hue saturation:0.3 brightness:brightness alpha:alpha ];
[rainbowArray addObject:color];
[rainbowArray addObject:newColor];
[rainbowArray addObject:newerColor];
[rainbowArray addObject:newestColor];
}
}
【问题讨论】:
-
用这个代替循环
[cell setBackgroundColor:[rainbowArray objectAtIndex:indexPath.row % rainbowArray.count]];
标签: ios iphone nsmutablearray uicollectionview uicolor