UIView Анимация не задержит! - PullRequest
2 голосов
/ 28 февраля 2010

У меня есть простой переход backgroundColor UIView, работающий в своем собственном потоке как таковой:

- (void)colorLoop_thread {  
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

// [self performSelector:@selector(changeColors)];
[self performSelectorOnMainThread:@selector(changeColors) withObject:nil waitUntilDone:NO];

 [pool release];
}

- (void)changeColors {
 if(self.colorStatus == colorBegin) {
  self.backgroundColor = [self randomColor];
  self.colorStatus = colorChanged;
 }

 if(self.colorStatus == colorChanged) {
  self.colorStatus = colorChanging;
  [UIView beginAnimations:@"ChangeColor" context:nil];
  [UIView setAnimationDuration:2.0f];
  [UIView setAnimationDelegate:self];
  [UIView setAnimationDidStopSelector:@selector(changeColorFinished:finished:context:)];
  self.backgroundColor = [self randomColor];
  [UIView commitAnimations];
 }
 [NSTimer scheduledTimerWithTimeInterval:0.033 target:self selector:@selector(changeColors) userInfo:nil repeats:NO];
}

- (void)changeColorFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context {
 if([animationID isEqualToString:@"ChangeColor"]) {
  self.colorStatus = colorChanged;
 }
}

однако ... когда он запускается после инициализации с таким:

colorStatus = colorBegin;
static BOOL colorThread = NO;if(!colorThread) {colorThread = YES;[NSThread detachNewThreadSelector:@selector(colorLoop_thread) toTarget:self withObject:nil];}

цвета никогда не меняются со временем, анимация проходит так, как будто задержки вообще нет, а фон меняется так быстро, что AppReviewers отклонят мое приложение по статьям, отвечающим за эпилептические припадки. Пожалуйста, кто-нибудь, помогите мне понять, почему анимация никогда не срабатывает с течением времени и вместо этого флеш-память заканчивается!

1 Ответ

0 голосов
/ 10 сентября 2011

Попробуйте self.layer.backgroundColor = [[self randomColor] CGColor].

...