なかじまの開発ブログ

アプリ開発における備忘録などなど。

MENU

ゲームの会話みたいにUITextViewに1つ1つ文字を表示する【Objective-C】

昔にどっかのサイトで見たコードを参考にして作りました。(サイト忘れた)


タッチしたら文字が1つ1つ表示されて、表示中にもう一度タッチすると文章が全部表示されます。


適当にInterface BuilderにUITextViewを設置しまして、Outlet接続(名前:textView)してください。


『.h』

int textIndex;
bool textflag;


『.m』

@synthesize textView;

- (void)viewDidLoad {
  [super viewDidLoad];

  textIndex = 0;
  textflag = false;
}

- (NSArray *)textArray {
  NSString *text1 = @"これは1つ目の文章だよ。改行もさせたいからそれとなく文章を長くしてみるよ。";
  NSString *text2 = @"これは2つ目の文章。";

    return @[text1, text2];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
  NSArray *textarr = [self textArray];

  if (textflag == true) {
     textflag = false;
     return;
  } 

  if (textarr.count > textIndex) {
    NSString *text = textarr[textIndex++];
    [[[NSOperationQueue alloc] init] addOperationWithBlock:^{
      textflag = true;
      for (int i = 0; i != [text length]; i++) {
        if (textflag == false) {
          [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            textView.text = text;
          }];
          break;
        }
    
        // 前から文字を切り取り
        NSString *message = [text substringWithRange:NSMakeRange(0, i+1);
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
          textView.text = message;
        }];

        // 次の文字を表示するまでスリープさせる
              [NSThread sleepForTimeInterval:0.1];
      }
      textflag = fase;
    }];
  } else {
    // 終了
  }
}