在动画期间,Animate字符串(逐个字符)不会出现在UITextView上

时间:2013-06-19 07:21:44

标签: ios objective-c multithreading jquery-animate uitextview

我正在尝试为NSString设置动画并使其逐个字符显示。 虽然我在NSLog中看到该函数确实有效,但是在动画期间,只有当动画结束时,文本才会出现在UITExtView上。

我的代码:

- (void)viewDidAppear:(BOOL)animated
{
    [self performSelectorOnMainThread:@selector(startAnimation) withObject:nil waitUntilDone:NO];
}

#pragma mark - General Methods

- (void)animateCharacterByCharacter_text:(NSString *)text characterDelay:(NSTimeInterval)characterDelay
{
    [self.textAbout setText:@""];

    for (int i=0; i < text.length; i++)
    {
        NSString *textToSet = [NSString stringWithFormat:@"%@%c", self.textAbout.text, [text characterAtIndex:i]];
        self.textAbout.text = textToSet;

        NSLog(@"%@", textToSet);

        [NSThread sleepForTimeInterval:characterDelay];
    }
}

- (void)startAnimation
{
    NSString *stringAbout = @"sfhasdf\nhajsbdh";
    [self animateCharacterByCharacter_text:stringAbout characterDelay:0.5];
}

我一直在尝试'dispatch_async',我得到了相同的结果。 我做错了什么?

1 个答案:

答案 0 :(得分:2)

不要使用sleepForTimeInterval:,因为它会阻止UI更新。相反,运行一个计时器,每次触发时都会在文本字段中添加下一个字符(并在完成后取消计时器)。