Изменение цвета шахматного поля после поворота

#ios #objective-c #nsarray #subview

#iOS #objective-c #nsarray #подвиды

Вопрос:

Я новичок в Obj-C . У меня есть следующее шахматное поле:

 for (int row = 0; row < 8; row  ) {
    for (int column = 0; column < 8; column  ) {

        CGRect square = {horizontalOffSet   (column * squareSize),
                         verticalOffSet   (row * squareSize),
                         squareSize, squareSize};
        UIView *rect = [[UIView alloc] initWithFrame:square];
        rect.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;

        horizontalOffSet = horizontalOffSet   squareSize;
        if ((row   column) % 2 == 0) {
            //verticalOffSet = verticalOffSet   squareSize;
            horizontalOffSet = 0;
            rect.backgroundColor = [UIColor whiteColor];
            [anotherRect addSubview:rect];
        } else {
            //verticalOffSet = verticalOffSet   squareSize;
            horizontalOffSet = 0;
            rect.backgroundColor = [UIColor blackColor];
            [anotherRect addSubview:rect];
        }
    }
}
  

Моя задача изменить цвета поля при его вращении, например, залить его голубым и фиолетовым цветом при повороте влево. Не совсем понимаю, как это сделать.

Ответ №1:

@somerk проверьте мой обновленный код:

1) Я присвоил идентификатор ( tag ) определенному виду шахмат, который имеет белый, а который черный цвет. вы можете сделать это без идентификатора, но в случае нескольких subviews идентификаторов — лучший способ получить.

  int horizontalOffSet = 2;
    int squareSize = 40;
    int verticalOffSet = 2;

    for (int row = 0; row < 8; row  ) {
        for (int column = 0; column < 8; column  ) {

            CGRect square = {horizontalOffSet   (column * squareSize),
                verticalOffSet   (row * squareSize),
                squareSize, squareSize};
            UIView *rect = [[UIView alloc] initWithFrame:square];
            rect.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;

            horizontalOffSet = horizontalOffSet   squareSize;
            if ((row   column) % 2 == 0) {
                //verticalOffSet = verticalOffSet   squareSize;
                horizontalOffSet = 0;
                rect.tag = 101;
                rect.backgroundColor = [UIColor whiteColor];
                [self.view addSubview:rect];
            } else {
                //verticalOffSet = verticalOffSet   squareSize;
                rect.tag = 102;
                horizontalOffSet = 0;
                rect.backgroundColor = [UIColor blackColor];
                [self.view addSubview:rect];
            }
        }
  

2) Я выполнил событие изменения цвета по UIButton щелчку мыши, поэтому вы должны использовать этот код после события поворота.

 -(IBAction)changeColor:(UIButton *)btn{
    for(UIView *rectViews in self.view.subviews){
        UIColor *clrblck = [UIColor blackColor];
        if(rectViews.backgroundColor == clrblck amp;amp; rectViews.tag == 102){
            rectViews.backgroundColor = [UIColor cyanColor];
        }else if(rectViews.backgroundColor == clrblck amp;amp; rectViews.tag == 101){
            rectViews.backgroundColor = [UIColor purpleColor];
        }else{
             // you will get other views here..
        }
    }
}
  
  • Я получил все подвиды и проверил backgroundColor и tag и изменил его backgroundColor .

Примечание: измените название вида в соответствии с названием вашего вида в loop и где вы добавляете rect as subviews в своем anotherRect .

Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы. Удачного кодирования 🙂

Комментарии:

1. это работает хорошо! Спасибо! Я только начинаю исследовать IBActions. Я вношу небольшие изменения в ваш код для белого цвета, и теперь он меняется на фиолетовый 🙂 Спасибо!

2. Замечательно, нравится работать в obj c. Вы можете использовать IBAction, когда вам нужно реализовать какое-либо свойство действия, такое как кнопка, сегмент, переключатель.. вы также можете сделать это программно. Спасибо

3. Спасибо и вам тоже приятного кодирования 🙂

Ответ №2:

Найдите другое возможное решение для изменения цветов:

 -(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

CGFloat rndmColor1 = (float)(arc4random() % 256) / 255;
CGFloat rndmColor2 = (float)(arc4random() % 256) / 255;


for(UIView *rect in self.chessField.subviews){
    if (rect.tag == 102) {
        rect.backgroundColor = [UIColor colorWithHue:rndmColor1 saturation:1 brightness:1 alpha:1];
    } else if (rect.tag == 101) {
        rect.backgroundColor = [UIColor colorWithHue:rndmColor2 saturation:1 brightness:1 alpha:1];
    }
}
  

}