UILabel Refresh - PullRequest
       15

UILabel Refresh

2 голосов
/ 20 ноября 2011

Я изучил это, но я все еще не совсем ясно, как это сделать.У меня есть UILabel.Я хотел бы написать слово ... письмо от последнего.Он проходит через каждую букву, а затем в конце появляется все слово.Сначала я подумал, что это просто потому, что это было слишком быстро, поэтому я добавил задержку с чем-то вроде этого.

    typedWord.text = [typedWord.text stringByAppendingString:@"C"];
    future = [NSDate dateWithTimeIntervalSinceNow: letterPause ];
    [NSThread sleepUntilDate:future];

Затем я прочитал, что это может быть потому, что он не обновляется до вызова функциизакончен.Было предложено использовать селекторный вызов.Я не уверен, как это сделать.Какие-либо предложения?

1 Ответ

2 голосов
/ 20 ноября 2011

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

Вам необходимо реализовать что-то вроде следующего:

// This code is in your view controller somewhere, where you initially decide to update the label. typedWord is the outlet to your UILabel.
NSString *newText = @"Hello";
typedWord.text = @"";
[self performSelector:@selector(updateLabel:) withObject:newText afterDelay:0.2];

Это вызывает:

// This is a separate method in your view controller, so typedWord still refers to the label outlet.
-(void)updateLabel:(NSString*)newText 
{
    // Get the first character of the passed in string
    NSString *firstCharacter = [newText substringToIndex:1];

    // Add this to whatever the current label text is
    typedWord.text = [NSString stringWithFormat:@"%@%@",typedWord.text,firstCharacter];

    // Trim off the first character
    NSString *remainingCharacters = [newText stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:@""];

    //If we still have characters left, do the loop again.
    if (![remainingCharacters isEqualToString:@""])
        [self performSelector:@selector(updateLabel:) withObject:remainingCharacters afterDelay:0.2];
}
...