Swift 2.0的新功能;尝试学习它,对动画感兴趣,并尝试编写一些代码以一次在屏幕上显示一条消息。
我写了这个,它可以工作,但是我不能帮忙,但是我可能无法对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 } } }