Как установить темный и светлый случайный цвет в UICollectionViewCell?

Я хочу создать тот же случайный цвет для выбранной ячейки ячейки и фона. Я успешно реализовал его с текущим кодом. но с этим я получаю cell.background цвет правильно, но я хочу установить светлый цвет на каждый индексный путь выбранной ячейки. так, как я могу это сделать? предположим,

if (indexpath.row ==1) {
    // lightcolor       
}
if (indexpath.row == 2) {
    // More light color as compare to indexpath.row ==1
}

@interface DisplayViewController () {
    DisplayCollectionViewCell *cell;
    float randomRed,randomGreen,randomBlue;
}

- (void)viewDidLoad {    
    randomRed = arc4random() % 255;
    randomGreen = arc4random() % 255;
    randomBlue = arc4random() % 255;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"DisplayCellIphone" forIndexPath:indexPath];

    if (indexPath.row == _setRandomIndex) {
        // For Selected Color
        cell.layer.backgroundColor  =  [UIColor colorWithRed:randomRed * 0.9 /255.0 green:randomGreen * 0.9 /255.0 blue:randomBlue * 0.9/255.0 alpha:1].CGColor;
    } else {
       cell.backgroundColor = [UIColor colorWithRed:randomRed/255.0 green:randomGreen/255.0 blue:randomBlue/255.0 alpha:1.0];
    }
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

    _count ++;
    randomRed = arc4random() % 255;
    randomGreen = arc4random() % 255;
    randomBlue = arc4random() % 255;

    if (indexPath.row == _setRandomIndex) {
        if (_count == 0) {
            [self addData:4];
        }      
        NSLog(@"Selected Right Cell");

        if (_count == 1 || _count == 2) {
            _setRandomIndex = arc4random() % 6;
            [self addData:6];            
           // _setRandomIndex = 2;          
        }
    // next cell till 20;
   }

Ответ 1

Вы можете использовать [UIColor colorWithHue: saturation: brightness: alpha:]

и измените значения яркости и насыщенности. Установите случайные значения для параметров и используя ответ в этом сообщении, получите компоненты вашего UIColor и сгенерируйте цвета, изменив только значения яркости и насыщенности, сохраняя постоянное значение оттенка

Есть ли функция для преобразования UIColor в Hue Saturation Brightness?

Ответ 2

Сначала сохраните свойство UIColor (я назвал его cellColor) и использую код ниже

if (indexpath.row ==1) {
    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
    self.cellColor = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];    
}
if (indexpath.row == 2) {
    CGFloat hue, saturation, brightness, alpha;
    BOOL success = [self.cellColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
    self.cellColor = [self.cellColor initWithHue:hue saturation:saturation/2 brightness:brightness alpha:alpha;
}

Теперь, в состоянии indexPath 1, вы создаете случайный цвет. И в состоянии indexPath 2 я получил значения оттенка и насыщенности и изменил значение насыщенности для случайного цвета, чтобы сделать ярче. Надеюсь, это поможет вам.