2014-01-26 4 views
2

У меня есть 3 пустых UILabels на экране, и я меняю их текст программно. Я хочу иметь задержку 1,5 и 2 секунды ... Например, первый всплывает, задержка на 1 секунду, вторая всплывает, задержка 1,5 секунды, третья - всплеск, 2-секундная задержка.Как получить задержку при изменении текста UILabel

Я написал строки кода, чтобы изменить текст уже, но все они появляются одновременно. sleep(); не работает должным образом.

load1.text = @"Reading fingerprint..."; 

load2.text = @"Fingerprint read..."; 

load3.text = @"Determining result..."; 

Это код, который я использую для изменения текста. Это происходит, когда я нажимаю кнопку.

Заранее спасибо ...

ответ

4

Есть несколько подходов. Одним из них является использование dispatch_after:

// Show first now 
load1.text = @"Reading fingerprint..."; 

// Show second after 1 second 
int64_t delayInSeconds = 1.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    load2.text = @"Fingerprint read..."; 
}); 

// Show third after 2.5 seconds 
delayInSeconds = 2.5; 
popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    load3.text = @"Determining result..."; 
}); 

Конечно, кажется, что было бы лучше, чтобы показать обновленные метки после того, как каждый из этих шагов фактически завершены вместо искусственных задержек. Не так ли?

+0

большое спасибо! Это сработало. Но теперь я хочу, чтобы он начал процесс, когда они снова нажали кнопку. Как я могу это сделать? – Dyllan

+0

Вы просто назовете этот же код еще раз. Конечно, вам, вероятно, сначала нужно сбросить метки. – rmaddy

+0

Большое спасибо @rmaddy! Этот код работает отлично, мне просто нужно установить его для сброса при следующем нажатии кнопки. Еще раз спасибо! – Dyllan

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