在swift 2.0中一次显示文本一个字符

新的Swift 2.0; 试图学习它,对animation感兴趣,并试图编写一些代码在屏幕上一次显示一个字符的消息。

我写这个,它的工作原理,但我忍不住,但我可以不用CALayers和/或alpha值做什么? 或者是一些有生气的小玩意儿,更值得一提的东西; 这感觉看起来有点笨重,真的很像1977年。

import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let supertext = "A long time ago, in a galaxy far, far away ..." let round = supertext.characters.count for i in 0...round { let delay = Double(i)/10 let subtext = supertext[supertext.startIndex..<supertext.startIndex.advancedBy(i)] NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: "ghostText:", userInfo: ["theText" :subtext], repeats: false) } } var view3:UITextView = UITextView() func ghostText(timer:NSTimer) { view3.removeFromSuperview() let userInfo = timer.userInfo as! Dictionary<String, AnyObject> let tempText:NSString = (userInfo["theText"] as! NSString) print(tempText) let font = UIFont(name: "Georgia", size: 18.0) ?? UIFont.systemFontOfSize(18.0) let textFont = [NSFontAttributeName:font] let subChararacter = NSAttributedString(string: String(tempText), attributes: textFont) view3.frame = CGRect(x: 100, y: 120, width: CGRectGetWidth(self.view.frame), height: CGRectGetWidth(self.view.frame)-20) view3.attributedText = subChararacter self.view.addSubview(view3) } 

我认为Swiftworthy是主观的,但是这里的另一个实现是基于你的代码如何工作,把NSTimer包装在一个Swift类中。

 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 } } }