键入animation:删除字符

下面是一个打字animation,它以一个固定的时间间隔将一个数组中的字符添加到文本字段的文本中:

@IBOutlet weak var textFieldMain: UITextField! var myText = Array("Hi! I'm Cesare.".characters) var myString = "Hi! I'm Cesare." var typingAnimationCounter = 0 var typingAnimationTimer: NSTimer? func fireTimer() { typingAnimationTimer = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "typeLetter", userInfo: nil, repeats: true) } func typeLetter() { if typingAnimationCounter < myText.count { textFieldMain.text = textFieldMain.text! + String(myText[typingAnimationCounter]) typingAnimationTimer?.invalidate() typingAnimationTimer = NSTimer.scheduledTimerWithTimeInterval(0.15, target: self, selector: "typeLetter", userInfo: nil, repeats: false) } else { typingAnimationTimer?.invalidate() } typingAnimationCounter++ } 

我想现在删除textField的字符(就像是一个打字animation,但是通过删除字符)。 不过,我无法弄清楚。

 func fireDeletionTimer() { typingAnimationTimer = NSTimer.scheduledTimerWithTimeInterval(0.45, target: self, selector: "deleteLetter", userInfo: nil, repeats: true) } func deleteLetter() { if typingAnimationCounter < myText.count - 1 { let index = myString.characters.count - typingAnimationCounter - 1 textFieldMain.text = myString.stringByReplacingOccurrencesOfString(String(myText[index]), withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) typingAnimationTimer?.invalidate() typingAnimationTimer = NSTimer.scheduledTimerWithTimeInterval(0.45, target: self, selector: "deleteLetter", userInfo: nil, repeats: false) } else { typingAnimationTimer?.invalidate() } typingAnimationCounter++ } 

我想用一个空stringreplace每一个字符,但它不起作用(string的随机字母被replace)。 我如何修复我的代码?

为什么不这样做:

 func deleteLetter() { if textFieldMain.text != "" { textFieldMain.text = str.substringToIndex(textFieldMain.text.endIndex.predecessor()) } else { typingAnimationTimer?.invalidate() } } 

顺便说一句,如果你用fireDeletionTimer() “repeats:true”来启动你的计时器,你不需要在deleteLetter()

此外, stringByReplacingOccurrencesOfString()清除文本中该字母的每个实例,而不仅仅是最后一个。

我会重写deleteLetter()方法是这样的:

 func deleteLetter() { myString = myString.substringToIndex(myString.endIndex.predecessor()) textFieldMain.text = myString typingAnimationTimer?.invalidate() if myString.characters.count > 0 { typingAnimationTimer = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "deleteLetter", userInfo: nil, repeats: false) } } 

编辑:看起来佐尔坦已经打败了我。