2011-10-24 5 views
2

현재 Apple의 음악 앱을 기반으로 음악 앱을 만들고 있는데, 진행률 막대를 추가하고 싶습니다.음악 진행률 표시 줄

내 앱에서 기본 iOS의 iPod 앱에서 재생되는 음악의 진행 상태를 보여주는 진행률 표시 줄을 만들려면 어떻게해야합니까?

+0

음악을 재생하려면 무엇을 사용하고 있습니까? –

+0

내 앱에 기본 iPod 앱의 정보가 표시되어 iPod 앱이 음악을 재생 중입니다. –

답변

3

MPMusicPlayerController 클래스 참조 - 특히 currentPlayBackTime 속성을 살펴 보시기 바랍니다. 결코 그걸 가지고 놀지는 않았지만, 당신이 그것을 가지고 인터페이스에서 어떻게 든 그것을 렌더링하고 싶어하는 것처럼 보입니다.

- (void) updateProgressBar:(NSTimer *) timer { 
    if (currentPlaybackTime != lengthOfSong) { 
     [self.progressBar setValue:self.musicPlayer.currentTime]; 
    } 
    else { 
     [timer invalidate], timer = nil; 
     [self.progressBar setValue:lengthOfSong]; 
    } 
} 
2

초마다 (1.0)을 발사하고 아래와 같이 진행 표시 줄을 업데이트하는 메소드를 호출 갈 수있는 타이머를 추가합니다.

3

이것은 내가 달성 한 방법입니다. 헤더 파일에서이 변수를 선언했습니다.

NSTimer * currentTimeUpdateTimer;

'UISlider *timeSlider;

BOOL userIsScrubbing;

- (IBAction)handleScrubberTouchDown:(id)sender;

- (IBAction)handleScrubberTouchUp:(id)sender;

- (IBAction)handleScrub:(id)sender;

주 파일 0

지금의 viewDidLoad 방법에 따라, 나는 그것이 모든 업데이트의 문제였다, 그 후 NSTimer에게

userIsScrubbing = NO;

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

을 달렸다.

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

if (nowPlayingItem == nil) { 
    self.minLabel.text = @"00:00"; 

} else { 
    NSNumber *duration = [nowPlayingItem valueForProperty:MPMediaItemPropertyPlaybackDuration]; 
    double currentTime = self.musicPlayer.currentPlaybackTime; 
    self.minLabel.text = [NSString stringWithFormat: @"%02d:%02d", (int) currentTime/60, (int) currentTime % 60];  
    self.maxLabel.text = [NSString stringWithFormat: @"%02d:%02d", [duration intValue]/60, [duration intValue] % 60]; 

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

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

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

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