###textviewに一文字づつ表示させたい
RPGのゲームのようなものを作成しています。よく一文字づつ続けてセリフが出てくるような画面がありますが、timerクラスを使った反復処理を行うクラスファイルを作成し、ストーリーボードでclassをtextviewにクラスを設定しています。表示された文字を一文字づつ続けて表示するように設定したいです。
###発生している問題
文字送りはできるのですが、最初にtextviewの文字が全て表示されてから、文字送りがされてしまいます。またタイマーの停止処理ができずに永遠に文字送りがされてしまいます。
###該当のソースコード<swift3>
import UIKit class Timertext: UITextView{ var sentence:String! var titlestr:String! //表示文字のインデックス var idx = 0 //処理中フラグ var flgRun = false override func draw(_ rect: CGRect) { let tmr = Timer.scheduledTimer( timeInterval: 1, target: self, selector: #selector(tickTimer(_:)), userInfo: nil, repeats: true) tmr.fire() } func tickTimer(_ timer: Timer) { titlestr = self.text //表示文字インデックス判定 if idx < titlestr.characters.count { //対象文字列の取得 //let num01 = titlestr.characters.count - 1 let loc = titlestr.characters.index( titlestr.startIndex, offsetBy: idx) let loc1 = titlestr.characters.index( titlestr.startIndex, offsetBy: idx + 1) //画面表示 self.text = self.text + titlestr.substring( with: loc..<loc1) //表示文字のインデックスのインプリメント idx += 1 } else { self.text = titlestr //タイマーの停止 timer.invalidate() //処理中フラグOFF flgRun = false } } }
###補足情報(言語/FW/ツール等のバージョンなど)
Xcode8 swift3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/19 11:33 編集