使用属性字符串键入效果

时间:2016-01-25 17:58:57

标签: ios objective-c nsattributedstring

我发现此代码可以为带有输入效果的标签设置动画。我正在尝试将其用于属性字符串。

https://stackoverflow.com/a/11687530/1813525

我试过这个,但我假设我只是根据属性字符串的字符串重新创建相同的代码:

- (void)animateLabelShowText:(NSAttributedString*)newText characterDelay:(NSTimeInterval)delay
{
    [self.mainLabel setText:@""];

    for (int i=0; i<newText.length; i++)
    {
        dispatch_async(dispatch_get_main_queue(),
                       ^{
        [self.mainLabel setAttributedText:[[NSAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@%C", [self.mainLabel.attributedText string], [[newText string] characterAtIndex:i]] attributes:nil]];
                       });



        [NSThread sleepForTimeInterval:delay];
    }
}

知道如何保留我的归因文字newText

的格式

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

两个问题(假设您在后台线程上调用animateLabelShowText:characterDelay:)。

  1. 您在后台主题上调用setText:@""。不要这样做。
  2. 您正在错误地构建每个新的属性字符串。
  3. 试试这个:

    - (void)animateLabelShowText:(NSAttributedString*)newText characterDelay:(NSTimeInterval)delay
    {
        for (NSInteger i = 0; i <= newText.length; i++)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                NSAttributedString *str = [newText attributedSubstringFromRange:NSMakeRange(0, i)];
                self.mainLabel.attributedText = str;
            });
    
            [NSThread sleepForTimeInterval:delay];
        }
    }