UIView backgroundColor цветовой цикл - PullRequest
0 голосов
/ 05 июня 2011

Прежде всего, я новичок в этом Xcode / Objective-C, так что будьте спокойны со мной! :) Я сделал тестовое приложение, которое, нажимая некоторые кнопки, меняет фон. У меня есть красная, синяя, зеленая, белая, черная кнопка и кнопка оживления.

Я заставил приложение изменить цвет фона, нажимая все цветные кнопки. Тем не менее, я хочу, чтобы приложение перебирало цвета, скажем, 100 раз очень быстро при нажатии кнопки Revive. По какой-то причине это не работает.

Ниже приведен код, который не работает:

Используя приведенный ниже код, меняется только последний цвет.

- (IBAction)Revive:(id)sender {

    for (int y=0; y < 100; y++) {
    view1.backgroundColor = [UIColor redColor];
    view1.backgroundColor = [UIColor greenColor];
    view1.backgroundColor = [UIColor blueColor];
    view1.backgroundColor = [UIColor whiteColor];
    view1.backgroundColor = [UIColor blackColor];
                                }  
}

Используя код, приведенный ниже, без цикла приложение исчезает с белого на черный

- (IBAction)Revive:(id)sender {

    [UIView animateWithDuration:0.2 animations:^{
    view1.backgroundColor = [UIColor redColor];
    view1.backgroundColor = [UIColor greenColor];
    view1.backgroundColor = [UIColor blueColor];
    view1.backgroundColor = [UIColor whiteColor];
    view1.backgroundColor = [UIColor blackColor];
    }];

 [UIView commitAnimations];

}

Кто-нибудь знает, почему это происходит и решение моей проблемы?

Ответы [ 2 ]

4 голосов
/ 05 июня 2011

Это будет работать:

- (void) doBackgroundColorAnimation {
    static NSInteger i = 0;
    NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], [UIColor whiteColor], [UIColor blackColor], nil];

    if(i >= [colors count]) {
        i = 0;
    }

    [UIView animateWithDuration:2.0f animations:^{
        self.view.backgroundColor = [colors objectAtIndex:i];           
    } completion:^(BOOL finished) {
        ++i;
        [self doBackgroundColorAnimation];
    }]; 

}
1 голос
/ 05 июня 2011

Представлению требуется время для перерисовки, в первом примере вы устанавливаете цвет фона, но представление не перерисовывается, пока вы не закончили с этим методом. С анимацией то же самое, как сказать следующее:

int x = 0;
x = 5;
x = 6;
// why is x 6 ? :(

Я бы использовал NSTimer для циклического перебора цветов.

...