0

オーディオplayer.currenttimeが2秒増加するたびに、updateviewメソッドを実行する必要があることを確認するループを作成しようとしています。

- (void)myTimerMethod{

 NSLog(@"myTimerMethod is Called");

myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                           target:self
                                         selector:@selector(checkPlaybackTime:)
                                         userInfo:nil
                                          repeats:YES];

  }


- (void)checkPlaybackTime:(NSTimer *)theTimer
  {
    float seconds =  audioplayer.currenttime;

    NSLog(@"Cur: %f",audioPlayer.currentTime ); 

    if (seconds = seconds + 2){

    [self update view];
}

 - (void)UpdateView{



if  (index < [textArray count])
 {
     self.textView.text = [self.textArray objectAtIndex:index];
   self.imageView.image = [self.imagesArray objectAtIndex:index];
   index++;
}else{

    index = 0;


   }
 }

audio player.currenttimerが2秒増加した場合の正しい書き込み方法は何ですか?これを実行します。

現在の時刻のNSLogは常に0.00を示します。何故ですか。オーディオプレーヤーの再生中に増加するはずです。

手伝ってくれてありがとう。

4

2 に答える 2

1

まず、現在の時刻ではなく、NSLogでフロートの「秒」を使用してみてください。

NSLog(@"Cur: %f", seconds); 

現在の時刻はfloatではなく、NSTimerオブジェクトであるため、NSLogテキストで%@を使用する必要があります。

NSLog(@"Cur: %@",audioPlayer.currentTime ); 

同様に機能するはずです。

audioPlayerが正しく設定されていると仮定すると、タイマーが2秒のときに探している場合、ifステートメントは次のようになります。

if(seconds == 2){
    [self update view];
}

タイマーが偶数、つまり2、4、6などに達するたびに探している場合、ifステートメントは次のようになります。

if(seconds % 2 == 0){
    [self update view];
}

ifステートメントの%はモジュロ符号です:http ://www.cprogramming.com/tutorial/modulus.html

また、現在のifステートメントは、seconds変数をチェックするのではなく割り当てています。それをチェックするには、==ではなく=が必要です。ただし、変数を単独でチェックしているため、現在のifステートメントはtrueになりません+ 2。言い換えると、秒が2の場合、ifステートメントは2 ==(2 + 2)かどうかを尋ねます。それは4で、2 ==(4 + 2)かどうかを尋ねています。このステートメントはtrueとして検証できません。

お役に立てれば!

于 2013-03-03T03:58:52.093 に答える
1

あなたがこのような時間間隔をインクリメントしたいというあなたの与えられた説明から私が理解したこと

Timer calls after 0.55
Timer calls after 0.60
Timer calls after 0.65
Timer calls after 0.70

& すぐ。

それがあなたがやろうとしていることなら。次に、repeats:YESをrepeats:NOに変更してタイマーが繰り返されないようにし、onTimerで、より長い間隔で新しいタイマーを開始することで、この方法を実行できると思います。

onTimerを使用するたびに間隔を少し長くできるように、間隔を保持する変数が必要です。

また、タイマーは1回しか起動しないため、おそらくもうタイマーを保持する必要はありません。保持すると、新しいタイマーが取得されます。

float gap = 0.50;

[NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO];

-(void) onTimer {
gap = gap + .05;
[NSTimer scheduledTimerWithTimeInterval:gap target:self selector:@selector(onTimer) userInfo:nil repeats:NO];
}

これがお役に立てば幸いです

于 2013-03-03T21:26:57.230 に答える