2013-08-01 2 views
2

У меня есть 10 изображений, и мне нужен цвет фона, который нужно менять случайным образом каждые 4 секунды с плавной анимацией.Как сменить цвет фона зрения плавно

мой код

self.bgTimer = [NSTimer scheduledTimerWithTimeInterval: 4.0 target: self 
         selector: @selector(updateViewBackground) 
         userInfo: nil repeats: YES]; 

self.bgTimer является NSTimer собственностью.

и способ для изменения фона

- (void)updateViewBackground { 
int randomNumber = arc4random_uniform(10); 
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
} 

его изменения фона в соответствии с выбранным случайным изображением, но он изменяет фон внезапно.

Мне нужно, чтобы цвет плавно менялся (потребуется 2 секунды при изменении, как выцветание или перекрестное растворение).

как достичь этого.

а также есть лучший подход, чтобы сделать это вместо этого NSTimer.

+0

Извините, но я попробовал это уже и не работал. –

+0

просмотрите мой обновленный ответ. – Buntylm

+0

работает с повторами: НЕТ в первый раз только по таймеру только один раз, но с повторами: ДА его не работает. –

ответ

0

Попробуйте это, если вы хотите изменить цвет с помощью анимации.

- (void)updateViewBackground { 
    int randomNumber = arc4random_uniform(10); 
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
    dispatch_async(queue, ^{ 
     dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
      [UIView transitionWithView:self.view duration:7.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
       self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
      } completion:nil]; 
     }); 
    }); 
} 

Если вы ищете анимацию более медленную, то увеличьте время продолжительности.

+0

Его работа прекрасна, но заблокирована моя основная тема, у нее есть UITable, и она не получает прокручивается должным образом, а иногда даже не получается прокручиваться, мы можем сделать это каким-то другим способом ... –

+0

Да, подождите, я обновлю свой ответ. – Buntylm

+0

Основной поток по-прежнему заблокирован, обновленный код не работает ... –

1

попробовать с этим ..

- (void)updateViewBackground { 
    CATransition *animation = [CATransition animation]; 
    [animation setDelegate:self]; 
    [animation setType:kCATransitionFromBottom]; 
    [animation setDuration:1.0]; 
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
    [[self.view layer] addAnimation:animation forKey:@"transitionViewAnimation"]; 
    int randomNumber = arc4random_uniform(10); 
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
} 

ИЛИ

- (void)updateViewBackground { 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.3]; 
     int randomNumber = arc4random_uniform(10); 
     self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
     [UIView commitAnimations]; 
} 
0

Вы используете правильную функцию, но только вы должны указать имя изображения.

- (void)updateViewBackground { 
    int randomNumber = arc4random_uniform(10); 
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i.png",randomNumber]]]; 
} 
0

Чтобы остановить изображения внезапно меняющихся вам нужно анимировать изменение -[UIView animateWithDuration: animations:] является то, что вы ищете. Вот небольшой пример кода:

self.view.backgroundColor = [UIColor redColor]; 

[UIView animateWithDuration:1.0 animations ^{ 
    self.view.backgroundColor = [UIColor greenColor]; 
}]; 

Очевидно, что вам нужно изменить это, чтобы соответствовать ваш код, и т.д. Надеюсь, что это помогает!

EDIT: Вот a link к классу Ссылка, которую вы хотите прочитать об этом!

Смежные вопросы