teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

以前と異なる質問形式にした。

2017/08/29 13:30

投稿

mokoporon
mokoporon

スコア26

title CHANGED
@@ -1,1 +1,1 @@
1
- Buttonを押すことで前の文章が消えの文章が現れるようにする方法。
1
+ Buttonを押すことで、TextViewの文章を一文字ずつ表示する方法について
body CHANGED
@@ -1,20 +1,44 @@
1
- ゲームなどによくあるような、Buttonを押すことでの文章が消え、次の文章が現れるようする方法が分かりません。Button(moji)を押しLabelに文章表示させることはできますが、以下のコードと、" "内囲まれた文章が同時に提示さてしまいます
1
+ teratail投稿されいた類似の質問参考に以下のコードを書き、TextViewのクラスを紐付けしたのち、ビルド画面を起動すると、TextView記載してある文章が一文字ずつ流
2
2
 
3
+ しかし、ビルド画面を起動した直後に文章をアニメーション表示するのではなく、Buttonで制御し、Buttonを押すことでTextViewの文章を流れるように加工したい。
4
+
5
+ この場合、どのようなコードを追加もしくは訂正すればよいでしょうか。
6
+
7
+
3
8
  ```Swift
9
+ import UIKit
10
+
11
+ class Timertext: UITextView {
12
+
4
- @IBAction func moji(_ sender: Any) {
13
+ @IBAction func alpha(_ sender: Any) {
14
+ print(Timertext())
15
+ }
16
+
17
+ var titlestr :String!
18
+
19
+ var idx = 0
5
- let myLabel = UILabel()
20
+ var flgRun = false
6
- let myLabel2 = UILabel()
21
+
7
- myLabel.text = "私の名前は○○です!"
8
- myLabel2.text = "どうぞよろしくお願いいたします"
9
- myLabel.frame = CGRect(x: 30, y: 100, width:500, height:100)
10
- view.addSubview(myLabel)
22
+ override func draw(_ rect:CGRect) {
23
+ let timer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(tickTimer(_:)), userInfo: nil, repeats: true)
11
24
 
12
- myLabel2.frame = CGRect(x: 30, y: 100, width:500, height:100)
13
- view.addSubview(myLabel2)
25
+ titlestr = self.text
26
+ self.text = ""
27
+
28
+ timer.fire()
14
29
  }
30
+
15
-
31
+ func tickTimer(_ timer: Timer) {
32
+ if idx < titlestr.characters.count {
33
+ self.text = titlestr.substring(to: titlestr.index(titlestr.startIndex, offsetBy: idx))
34
+
35
+ idx += 1
36
+
37
+ } else {
38
+ self.text = titlestr
39
+ timer.invalidate()
40
+ flgRun = false
41
+ }
42
+ }
43
+ }
16
- ```
44
+ ```
17
-
18
- そもそも、もっと効率的な書き方があるような気もしますが…。初心者で、以上の書き方以外に方法が思いつきません。
19
-
20
- 訂正箇所・根本的に間違っている箇所などありましたら、ご指摘お願いいたします。