首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入动画:删除字符

输入动画:删除字符
EN

Stack Overflow用户
提问于 2016-03-05 13:01:08
回答 2查看 132关注 0票数 0

下面是一个类型动画,它在固定的时间间隔内将数组中的字符添加到文本字段中:

代码语言:javascript
复制
@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的字符(比如如果是打字动画,而是删除字符)。不过,我不知道怎么做。

代码语言:javascript
复制
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++
}

我想用一个空字符串替换每个字符,但是它不起作用(字符串中的随机字母被替换)。我怎样才能修正我的代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-05 13:21:13

为什么不做以下工作:

代码语言:javascript
复制
func deleteLetter() {
    if textFieldMain.text != "" {
        textFieldMain.text = str.substringToIndex(textFieldMain.text.endIndex.predecessor())
    } else {
       typingAnimationTimer?.invalidate()
    }
}

顺便说一句,如果您在fireDeletionTimer()中使用“重复:真”启动计时器,您不需要在deleteLetter()中一次又一次地重新创建它。

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

票数 4
EN

Stack Overflow用户

发布于 2016-03-05 13:27:27

我会将deleteLetter()方法重写为如下所示:

代码语言:javascript
复制
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)
    }
}

编辑:看起来佐尔坦已经超过我了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35814451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档