我需要在我的应用中执行这样的效果:
我该怎么做?我需要在文本中为单个字母设置动画,而不是整个标签。我正在使用Swift。
编辑(更多详情):
我需要使用一种弹簧阻尼(如UIView动画)从右到左为字母设置动画,但我不知道如何实现这一点。这个动画最重要的部分是第一个,其中字母从左到右进入,第一个和其他字母之间有一个可变空间
答案 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
}
}
}