2013-02-12 4 views
0

Я хотел бы оживить подсчет digets в тексте, вычисляющем вверх. Тексты находятся в UILabel, подобном You have driven for 0.0km, и его необходимо изменить на You have driven for 143.6km с подсвеченной анимацией. Есть ли способ обновить его анимированный?Обновить текст UILabel анимированный

Редактировать Вот некоторые из моего текущего кода, относительно другой анимации у меня уже есть:

 if (animated) 
     { 
      [UIView beginAnimations:@"scaleAnimation" context:nil]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
      [UIView setAnimationDuration:animationDuration]; 
     } 

     [...] 

     // Amount pointer 
     float xForRedBar = redBarFrame.size.width + redBarFrame.origin.x; 

     CGRect pointerFrame = cell.amountBarPointer.frame; 
     pointerFrame.origin.x = (xForRedBar - (pointerFrame.size.width/2)); 

     if (pointerFrame.origin.x < 12) 
      pointerFrame.origin.x = 12; 

     if (pointerFrame.origin.x >= (308 - (pointerFrame.size.width/2))) 
      pointerFrame.origin.x = 308 - pointerFrame.size.width; 

     [cell.amountBarPointer setFrame:pointerFrame]; 

     // Amount bar 
     CGRect amountBarFrame = cell.amountBar.frame; 
     amountBarFrame.origin.x = 9+(((302 - amountBarFrame.size.width)/100)*self.procentCompleted); 

     [cell.amountBar setFrame:amountBarFrame]; 

     // Amount info text 
     CGRect amountInfoFrame = cell.amountInfo.frame; 
     amountInfoFrame.origin.x = amountBarFrame.origin.x + 2; 

     [cell.amountInfo setFrame:amountInfoFrame]; 

     // Amount text 
     [cell.amountInfo setText:[NSString stringWithFormat:NSLocalizedString(@"You have driven for %@km", nil), self.userAmount]]; 

     [...] 

     if (self.procentCompleted == 0) 
     { 
      [cell.amountBar setAlpha:0]; 
      [cell.amountBarPointer setAlpha:0]; 
      [cell.amountInfo setAlpha:0]; 
     } 
     else { 
      [cell.amountBar setAlpha:1]; 
      [cell.amountBarPointer setAlpha:1]; 
      [cell.amountInfo setAlpha:1]; 
     } 

     if (animated) 
     { 
      [UIView commitAnimations]; 
     } 
+0

Здесь вы идете: http://stackoverflow.com/a/6267259/1228534 – graver

+0

Спасибо ... но это не решает мою проблему. –

+0

Так ваш вопрос, как изменить число каждые 'x' миллисекунды, пока оно не переместится из значения' a' в значение 'b'? Ответ на этот вопрос будет заключаться в использовании «NSTimer», как предложено ниже @rdelmar. Или ваш вопрос связан с фактической анимацией изменений между любыми двумя цифрами? – Mathew

ответ

1

Конечно, вы можете обновить его «анимированный», но вы должны использовать повторяющийся таймер , и добавьте один (или любой другой интервал, который вы хотите) к счету каждый раз, когда вызывается селектор таймера. Включите тест для окончательного значения и отмените таймер, когда вы туда доберетесь.

После Edit:

Если вы хотите, чтобы скорость подсчета замедляться к концу, я бы не использовать таймер, я хотел бы использовать performSelector: withObject: afterDelay :. Чтобы повторить это, вы вызываете этот метод из своего селектора. Вам нужно будет сделать какой-то тест, чтобы увидеть, приближаетесь ли вы к концу подсчета, а затем добавьте немного времени на задержку с каждым проходом. Что-то вроде этого:

-(IBAction)countUp:(id)sender { 
    [self performSelector:@selector(countUpLabel) withObject:nil afterDelay:.1]; 
} 

-(void)countUpLabel { 
    static float delay = .01; 
    num+= 1; 
    label.text = [NSString stringWithFormat:@"%d",num]; 
    if (num < 40) { 
     [self performSelector:@selector(countUpLabel) withObject:nil afterDelay:.1]; 
    }else if (num > 35 && num <50) { 
     [self performSelector:@selector(countUpLabel) withObject:nil afterDelay:.1 + delay]; 
     delay += 0.01; 
    } 
} 
+0

Не кажется, что память эффективна ... но я понимаю ваше предложение. Может быть, не стоит того, чтобы «приятно иметь» функцию. –

+0

@PaulPeelen, я не думаю, что это особенно интенсивно для памяти, и это единственный способ увидеть, как цифры подсчитываются (если это то, что вы хотели). Я не уверен, что вы подразумеваете под «ослаблением» - вы хотите, чтобы он замедлялся по мере приближения к концу? – rdelmar

+0

Исправить. Я хочу, чтобы он ускорялся в начале и замедлялся до конца. То же, что и UIViewAnimationCurveEaseInOut' для анимации. –

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