Изменить цвет шахматного поля после поворота - PullRequest
1 голос
/ 27 марта 2019

Я новичок в 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];
        }
    }
}

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

Ответы [ 2 ]

1 голос
/ 27 марта 2019

@ Влад Батаев, проверьте мой обновленный код:

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 && rectViews.tag == 102){
            rectViews.backgroundColor = [UIColor cyanColor];
        }else if(rectViews.backgroundColor == clrblck && rectViews.tag == 101){
            rectViews.backgroundColor = [UIColor purpleColor];
        }else{
             // you will get other views here..
        }
    }
}
  • Я получил все подпредставления и проверил backgroundColor и tag и изменил его backgroundColor.

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

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

0 голосов
/ 28 марта 2019

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

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

}

...