Search code examples
iosanimationuilabel

Letter by letter animation for UILabel?


Is there a way to animate the text displayed by UILabel. I want it to show the text value character by character.

Help me with this folks


Solution

  • Update for 2018, Swift 4.1:

    extension UILabel {
    
        func animate(newText: String, characterDelay: TimeInterval) {
    
            DispatchQueue.main.async {
    
                self.text = ""
    
                for (index, character) in newText.enumerated() {
                    DispatchQueue.main.asyncAfter(deadline: .now() + characterDelay * Double(index)) {
                        self.text?.append(character)
                    }
                }
            }
        }
    
    }
    

    calling it is simple and thread safe:

    myLabel.animate(newText: myLabel.text ?? "May the source be with you", characterDelay: 0.3)
    

    @objC, 2012:

    Try this prototype function:

    - (void)animateLabelShowText:(NSString*)newText characterDelay:(NSTimeInterval)delay
    {    
        [self.myLabel setText:@""];
    
        for (int i=0; i<newText.length; i++)
        {
            dispatch_async(dispatch_get_main_queue(),
            ^{
                [self.myLabel setText:[NSString stringWithFormat:@"%@%C", self.myLabel.text, [newText characterAtIndex:i]]];
            });
    
            [NSThread sleepForTimeInterval:delay];
        }
    }
    

    and call it in this fashion:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
    ^{
        [self animateLabelShowText:@"Hello Vignesh Kumar!" characterDelay:0.5];
    });