解決策 1: タイマーを使用する
テキストビューにテキストを徐々に追加するには、NSTimer を使用できます。
要件
インターフェイスで - 次の ivar またはプロパティ:
UITextView *textView;
NSNumber *currentIndex;
NSTimer *timer;
NSString *stringForTextView;
文字列が作成され、テキストビューが設定されていると仮定すると、タイマーを作成して開始する関数を作成できます。
- (void) updateTextViewButtonPressed
{
timer = [NSTimer scheduledTimerWithTimeInterval:.5
target:self
selector:@selector(addTextToTextView)
userInfo:nil
repeats:YES];
}
- (void) addTextToTextView
{
textView.text = [string substringToIndex:currentIndex.integerValue];
currentIndex = [NSNumber numberWithInt:currentIndex.integerValue + 1];
if(currentIndex.integerValue == string.length)
{
[_timer invalidate];
timer = nil;
}
}
これは基本的な実装であり、タイマーの userInfo として文字列を渡すように変更できます (クラス レベルに存在しない場合)。addTextToTextView
次に、セレクターで を使用してアクセスできますsender.userInfo
。タイマーの間隔と、テキストが追加される正確さを調整することもできます。例として、0.5 秒と文字ごとの連結を使用しました。
解決策 2: ループを使用する
要件
NSString *string
UITextview *textView
- (void) updateTextViewButtonPressed
{
// perform the actual loop on a background thread, so UI isn't blocked
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^()
{
for (int i = 0; i < string.length; i++)
{
// use main thread to update view
dispatch_async(dispatch_get_main_queue(), ^()
{
textView.text = [string substringToIndex:i];
});
// delay
[NSThread sleepForTimeInterval:.5];
}
});
}