【问题标题】:Animate letters in a label or text view [closed]在标签或文本视图中动画字母[关闭]
【发布时间】:2016-03-16 13:23:11
【问题描述】:

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

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

编辑更多细节):

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

【问题讨论】:

标签: ios swift animation text


【解决方案1】:

不久前我问了一个类似的问题,并得到了这个答复

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

【讨论】:

  • 这很好,但我需要一些更动画的东西,一种 UIView.animateWithDuration... 使用SpringWithDamping 从右到左(然后从左到右)为字母设置动画,但我真的不不知道怎么办
猜你喜欢
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多