0

設定

現在、音楽アプリを開発していますが、プログレスバーのスライダーに問題があります。

self.musicPlayerそれは[MPMusicPlayerController applicationMusicPlayer]

self.currentlyPlayingTotalDurationNSNumber

self.currentlyPlayingTimeSliderUISlider


概要

以下のコードは、で新しい曲が選択されたときに実行されますMPMusicPlayerController。この方法(すべてが表示されているわけではありません)では、選択した曲を再生するように音楽プレーヤーを設定し(動作中)、再生するように設定します(動作中)。次に、曲の合計再生時間をスライダーの最大値に設定します(動作中

self.currentlyPlayingTotalDuration = [[NSNumber alloc] initWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]];    
[self.currentlyPlayingTimeSlider setMaximumValue:self.currentlyPlayingTotalDuration.floatValue];

値が正しく設定されているかどうかを確認するために値をログに記録しました(値

NSLog(@"Number:%@", [NSNumber numberWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]]);
NSLog(@"Max:%f", self.currentlyPlayingTimeSlider.maximumValue);

ログ出力は以下のとおりです。

2011-08-24 13:38:25.004 App [1241:707] Number:1107392
2011-08-24 13:38:25.009 App [1241:707] Max:1400544.000000

次に、currentlyPlayingTimeSlider値を0に設定して開始します(動作中

self.currentlyPlayingTimeSlider.value = 0.0;

次に、updateSliderTime1秒に1回呼び出すようにメソッドを設定して、プログレスバーをさらに1秒移動します(動作中

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

問題

毎秒呼び出されているにもかかわらず機能していないupdateSliderTimeメソッドの完全なメソッドコードを以下に示します。

- (void)updateSliderTime:(NSTimer *)timer {
    [self.currentlyPlayingTimeSlider setValue:[[NSNumber numberWithDouble:self.musicPlayer.currentPlaybackTime] floatValue]];
}

valueChangedまた、 InterfaceBuilderで設定したイベントに対して呼び出すメソッドは次のとおりです。それも機能していません

- (IBAction)sliderChanged:(id)sender {
    [self.musicPlayer setCurrentPlaybackTime:[[NSNumber numberWithFloat:self.currentlyPlayingTimeSlider.value] doubleValue]];
}

誰かが私が間違っていることを理解するのを手伝ってもらえますか?これらの最後の2つの方法では、最初の方法で問題がないため、何かである必要があります。他の場所では、スライダーをカスタマイズしたり、いじったりすることはありません。

4

2 に答える 2

3

呼び出されていることを確認しましたかIBAction(おそらくでNSLog)?そうでない場合は、必ずスライダーのデリゲートを設定してください。

それ以外の場合は、非常によく似たこの質問に対する私の答えを確認してください。

于 2011-08-24T21:40:49.720 に答える
1

理解した。スライダーの最大値を設定する以外は、すべてが実際に正常に機能していました。奇妙に変換しました。それ以外の:

self.currentlyPlayingTotalDuration = [[NSNumber alloc] initWithFloat:(int)[NSValue valueWithPointer:[self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration]]];

私は使用する必要があります:

self.currentlyPlayingTotalDuration = [self.musicPlayer.nowPlayingItem valueForKey:MPMediaItemPropertyPlaybackDuration];

値はすでに数値です。値を記録するように動機付けてくれたMundiに感謝します。すると、もうフロートだと気づきました。愚かな私:)

于 2011-08-24T23:58:41.853 に答える