在标签或文本视图中设置动画字母

时间:2016-03-16 13:23:12

标签: ios swift animation text

我需要在我的应用中执行这样的效果:

letters effect

我该怎么做?我需要在文本中为单个字母设置动画,而不是整个标签。我正在使用Swift。

编辑更多详情):

我需要使用一种弹簧阻尼(如UIView动画)从右到左为字母设置动画,但我不知道如何实现这一点。这个动画最重要的部分是第一个,其中字母从左到右进入,第一个和其他字母之间有一个可变空间

1 个答案:

答案 0 :(得分:0)

前一阵子我问了一个类似的问题并得到了

的回复

https://stackoverflow.com/users/4754400/chris-gulley

确实是一段非常聪明的代码。

class Timer {
typealias TimerFunction = (Int)->Bool
private var handler: TimerFunction
private var i = 0

init(interval: NSTimeInterval, handler: TimerFunction) {
    self.handler = handler
    NSTimer.scheduledTimerWithTimeInterval(interval, target: self, selector: "timerFired:", userInfo: nil, repeats: true)
}

@objc
private func timerFired(timer:NSTimer) {
    if !handler(i++) {
        timer.invalidate()
    }
}
}

class ViewController: UIViewController {
    let text: NSAttributedString = {
    let font = UIFont(name: "Georgia", size: 18.0) ?? UIFont.systemFontOfSize(18.0)
    return NSAttributedString(string: "A long time ago, in a galaxy far, far away ...", attributes: [NSFontAttributeName: font])
}()

override func viewDidLoad() {
    super.viewDidLoad()

    let textView = UITextView(frame: CGRect(x: 100, y: 120, width: CGRectGetWidth(self.view.frame), height: CGRectGetWidth(self.view.frame)-20))
    self.view.addSubview(textView)

    let _ = Timer(interval: 0.1) {i -> Bool in
        textView.attributedText = self.text.attributedSubstringFromRange(NSRange(location: 0, length: i+1))
        return i + 1 < self.text.string.characters.count
    }
}
}

Displaying text one character at a time in swift 2.0