2016-12-27 2 views
0

Я хочу представить таймер обратного отсчета. Изображение прогресса должно изменить цвет для < 70% - желтый, < 50% -ред. Но UIProgressView не обновляется после изменения ProgressTintColor. (Для 0 < x < 0,5).UIProgressView не обновляет значение <= 0.5 после изменения ProgressTintColor

Но Он отлично работает, когда я комментирую

[self.progressView setProgressTintColor: [UIColor redColor]]; //this line. 

Код ниже будет триггером для каждой второй:

float value = (float)secondsLeft/(float)secTotalDuration; 
if (value < 0.9) { 
     if (isChange == NO) { 
      //[self.progressView setTranslatesAutoresizingMaskIntoConstraints: NO]; //- I tried THIS. 

      [self.progressView setProgressTintColor: [UIColor redColor]]; //LINE - #1 
      [self.progressView setTrackTintColor: [UIColor clearColor]]; 

      isChange = YES; 
     } 

     dispatch_async(dispatch_get_main_queue(), ^{ //With or without mainqueue doen't affect Uiprogressview change while commenting LINE - #1 
       [self.progressView setProgress:value animated:NO]; 
     }); 

     NSLog(@"Progress: %f", [self.progressView progress]); 

И LOG:

Progress: 1.000000 
Progress: 0.800000 
Progress: 0.700000 
Progress: 0.500000 //Doesn't updated after this. 
Progress: 0.300000 
Progress: 0.200000 
+0

Поместите все обновления UI код, связанный под 'dispatch_get_main_queue()' блок. – byJeevan

+0

Я тоже пробовал, jeevan. Но такой же результат. –

+0

Не могли бы вы рассказать мне, что именно вы хотите достичь? – byJeevan

ответ

0

Пожалуйста, попробуйте следующее:

-(void) updateProgress:(NSNumber *) value { 

     //Progress Value   
     [self.progressView setProgress:value animated:NO]; 

     //Progress Color   
     if (value < 0.5) { 

      [self.progressView setProgressTintColor: [UIColor redColor]]; 
      [self.progressView setTrackTintColor: [UIColor clearColor]]; 
     } 
     else if (value < 0.7) { 

      [self.progressView setProgressTintColor: [UIColor yellowColor]]; 
      [self.progressView setTrackTintColor: [UIColor clearColor]]; 
     } 
     else if (value < 1.0) {  

      [self.progressView setProgressTintColor: [UIColor greenColor]]; 
      [self.progressView setTrackTintColor: [UIColor clearColor]]; 

     } 
} 

затем вызвать его

float value = (float)secondsLeft/(float)secTotalDuration; 

[self performSelectorOnMainThread:@selector(updateProgress:) withObject:@(value) waitUntilDone:NO]; 
+0

Спасибо за ваш ответ. Но это не решает мою проблему. Его значение остается неизменным после 0,5. –

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