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