Search code examples
iosobjective-cnsarraysubview

Change color of chess field after rotate


I newbie in Obj-C. I have the following chess field:

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

My task to change colours of the field when it rotates, for example, fill it with cyan and purple colour when rotating on left. Not clearly understand how to do it.


Solution

  • @somerk check my updated code:

    1) I have give identifier(tag) to identified chess view and which has white and which has black color. you can do it without identifier but in case of multiple subviews identifier is better way to get.

     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) I have performed color change event on UIButton click so you have to use that code after rotation event.

    -(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..
            }
        }
    }
    
    • I have get all subviews and check backgroundColor and tag and change its backgroundColor.

    Note: change view'name according your view's name in loop and where you add rect as subviews in your anotherRect.

    Free to ask me if you have any question. Happy Coding :)