0

タイプライター効果を作成しようとしています。私のコードは正常に動作します。私の問題、そしてこれ...UITextViewはリアルタイムで更新できません。これは私のコードです:

NSMutableArray *testochar=[util getTestoChar:value];

for (int i=0; i<[testochar count]; i++){
    NSString *y=[testochar objectAtIndex:i];

    [NSThread sleepForTimeInterval:0.1f];

    self.txtview.text=[self.txtview.text stringByAppendingString:y];
}
4

2 に答える 2

3

メインスレッドで行う必要のあるUIのすべての変更、使用してみてくださいperformSelectorOnMainThread:withObject:waitUntilDone:

電話

    //...
    for(int i=0;i<[testochar count];i++){
        NSString *y=[testochar objectAtIndex:i];
        [NSThread sleepForTimeInterval:0.1f];
        NSDictionary *arg =  [NSDictionary dictionaryWithObjectAndKeys:
                self.txtview, @"textView",
                y, @"string", nil ];
       [self performSelectorOnMainThread:@selector(updateTextForTextView:) withObject:arg waitUntilDone:NO];
    }

//.....


-(void)updateTextForTextView:(NSDictionary*)arg {
    NSString *string = [arg objectForKey:@"string"];
    UITextView *textView = [arg objectForKey:@"textView"];
    self.txtview.text=[self.txtview.text stringByAppendingString:string];
}

(アップデート)

試す

- (void)viewDidLoad {
    [super viewDidLoad];

    textView.text = @"";


    [[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(update) userInfo:nil repeats:YES] retain];
}


-(void) update {
    static char text[] = "HELLO";
    static int i =0;

    if (text[i%6]==0) {
        textView.text = [NSString stringWithFormat:@""];
    } else {
        textView.text = [NSString stringWithFormat:@"%@%c", textView.text, text[i%6] ];
    }
    i++;
}

次のように機能します: http ://www.youtube.com/watch?v = tB2YKX4zpY4

于 2012-06-02T12:00:07.457 に答える
2

あなたのアドバイスに本当に感謝します。このようにコードを変更することでそれを行いました。

1) self.timer = [[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(update) userInfo:nil repeats:YES] retain];

-(void) update {
    char text[[self.testo length]];

    for(int i=0;i<self.testo.length;i++){
        text[i]=[self.testo characterAtIndex:i];
    }

    static int i =0;

    if (i==self.testo.length) {
      ///  txtview.text = [NSString stringWithFormat:@""];
        [self.timer invalidate];
    } else {
        txtview.text = [NSString stringWithFormat:@"%@%c", txtview.text, text[i%self.testo.length] ];

    } 

    i++;
}
于 2012-06-03T12:01:50.117 に答える