2016-08-11 15 views
0

進行状況バーとして機能するUISliderを表示しようとしています。 UISliderの進捗状況が、システムメディアプレーヤーで再生されている曲の現在の進行状況になるようにします。システムメディアプレーヤーの進行状況(UISlider)

これは私のコードです:loadViewメソッドで

static MPMusicPlayerController *musicPlayer; 
NSTimer * currentTimeUpdateTimer; 

UISlider *timeSlider; 

:のviewDidLoadで

musicPlayer = [MPMusicPlayerController systemMusicPlayer]; 

    timeSlider = [[UISlider alloc] initWithFrame:CGRectMake((((scrollView.contentSize.width/2)+(scrollView.contentSize.width/12))-10), 100, (((scrollView.contentSize.width/2)-(scrollView.contentSize.width/6))+20), 80)]; 
    timeSlider.backgroundColor = [UIColor clearColor]; 
    timeSlider.minimumTrackTintColor = [UIColor whiteColor]; 
    timeSlider.maximumTrackTintColor = [UIColor blackColor]; 
    timeSlider.alpha = 0.8; 
    timeSlider.exclusiveTouch = YES; 
    [scrollView addSubview:timeSlider]; 

私headers.hファイルで

currentTimeUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateCurrentiPodItemTime) userInfo:NULL repeats:YES]; 

userIsScrubbing = NO; 

これらは、 contのための関数ローリングとUISlider

- (void)updateCurrentiPodItemTime { 
MPMediaItem *nowPlayingItem = [musicPlayer nowPlayingItem]; 

if (nowPlayingItem == nil) { 

} else { 
double currentTime = musicPlayer.currentPlaybackTime; 

if (!userIsScrubbing) 
    timeSlider.value = (float) currentTime; 
} 
} 

- (void)handleScrubberTouchDown:(id)sender { 
userIsScrubbing = YES; 
} 

- (void)handleScrubberTouchUp:(id)sender { 
userIsScrubbing = NO; 
} 

- (void)handleScrub:(id)sender { 
musicPlayer.currentPlaybackTime = timeSlider.value; 
} 

の値を設定するしかし、何が起こるかはUISlider値が常にいっぱいで、曲が進むにつれて進まないです。

UISliderのポイントは、再生中の音楽をユーザーがスクラブできるようにすることです。

+0

タグをクリーンアップしました。 **実際に**使用している** 1 **言語用のタグを追加します(ヒント:あなたがタグ付けしたものはありません)。あなたがわからない場合は、コードを書かない方がよいでしょう。 – Olaf

+0

@Olaf Ok申し訳ありません。しかし、私は文法を調べる必要があると思います。 "あなたはコードを書かない方がいい"という意味合いはない。 – TheHellOTrofasdasd

+0

「わかりません」:Dとにかく、あなたの実装は大丈夫ですが、なぜ動作していないのかわかりません。あなたはレイアウトをサブビューしようとしましたか? – RomOne

答えて

1

私はそれを試しました。 uisliderの最大値は1だったので、最大値を曲の長さの合計に設定しました。

+0

これは、値が1より大きいかどうかを確認するように指示したときに考えたものです); – RomOne

+0

@RomOneはい。私は前にそれをしていたはずです。しかし、うーん、私はしませんでした。ご協力いただきありがとうございます。 – TheHellOTrofasdasd

+0

@RomOne私は[[%c(SBMediaController)sharedInstance] play]という別の関数で何らかの理由で気づいただけです。この新しいuisliderで呼び出されると、デバイスがフリーズします。何か案は? – TheHellOTrofasdasd

関連する問題