Как сделать анимация набора текста в Label?
Как сделать чтобы текст набирался плавно, у меня в начале идет плавный набор, но потом рывками и частями появляется. Подскажите пожалуйста, что поправить в коде:
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)
self.fadeTransition(0.2)
}
}
}
}
}
extension UIView {
func fadeTransition(_ duration:CFTimeInterval) {
let animation = CATransition()
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
animation.type = CATransitionType.fade
animation.duration = duration
layer.add(animation, forKey: CATransitionType.fade.rawValue)
}
}
далее во viewDidLoad вызываю метод
override func viewDidLoad() {
super.viewDidLoad()
Label.animate(newText: """
Здесь много текста.
""", characterDelay: 0.1)
}
Ответы (1 шт):
Автор решения: Oleg Soloviev
→ Ссылка
Попробуйте вот так:
extension UILabel {
func animation(typing value: String, duration: Double){
for char in value {
self.text?.append(char)
RunLoop.current.run(until: Date() + duration)
}
}
}
И вызывайте во viewDidAppear, а не во viewDidLoad:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
Label.text = ""
Label.animation(typing: "Здесь много всякого разного текста.", duration: 0.1)
}