1

少し助けが必要です。50などの値を取得するメソッドがあり、その値をtrackDurationに割り当てます。したがって、NSNumber * trackDuration = 50で、メソッドをtrackDurationの値から1秒マイナス1に設定し、ラベルを更新します。期間と呼ばれるラベル。

これが私がこれまでに持っているものです。

- (void) countDown {
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];

NSNumber *trackDuration = [NSNumber numberWithDouble:[[iTunes currentTrack] duration]];
while (trackDuration > 0) {
    trackDuration - 1;
    int inputSeconds = [trackDuration intValue];
    int hours =  inputSeconds / 3600;
    int minutes = ( inputSeconds - hours * 3600 ) / 60; 
    int seconds = inputSeconds - hours * 3600 - minutes * 60; 
    NSString *trackDurationString = [NSString stringWithFormat:@"%.2d:%.2d:%.2d", hours, minutes, seconds];
    [duration setStringValue:trackDurationString];
    sleep(1);
}}

高度なサーミ人に感謝します。

4

2 に答える 2

2

これによりメインスレッドがブロックされ、値trackDurationが割り当てられないため、常に50のままになります。

trackDuration -1;

する必要があります:

trackDuration--; // or trackDuration -= 1;

また、私はこのようにします:

- (void)startCountDown
{
    [NSTimer scheduledTimerWithInterval:1.0f target:self selector:@selector(timerHit:) userInfo:nil repeats:YES];
}
- (void)timerHit:(NSTimer *)p_timer
{
  if( trackDuration <= 1 && [p_timer isValid] )
     [p_timer invalidate];
 // track duration is an instance variable
 trackDuration--;
 // update LABEL
}

NSTimerにはiOS2.x以降が必要です

于 2011-02-03T23:24:39.150 に答える
0

このメソッドをループで実行すると、実行中ずっとアプリが応答しなくなります。UIの更新も表示されません。代わりに、1秒間隔でNSTimerを使用し、タイマーが起動したときに経過時間を更新する必要があります。

于 2011-02-03T23:29:11.503 に答える