2010-04-23 3 views
0

오디오 플레이어가있어서 재생 시간을 표시하고 싶습니다. 나는 커스텀 플레이 클래스를 사용하고있다.재생 위치를 부드럽게하는 NSTimer

5 %가 다운로드되면 파일에서 mp3를 다운로드 한 다음 파일에서 재생합니다. 파일이 재생 될 때 진행보기 업데이트가 있고 진행보기에 대한 각 호출시 레이블이 업데이트됩니다. 그러나 이것은 육포적입니다 ... 때로는 한두 자리 뒤로도갑니다.

나는 NSTimer를 사용하여 물건을 부드럽게 만들 것을 고려하고있었습니다. 매초마다 메서드에 해고되고 재생 된 백분율을 메서드에 전달한 다음 레이블을 업데이트합니다.

먼저이 방법이 합리적으로 보입니까?

둘째, 타이머의 대상에 백분율 (부동 소수점)을 어떻게 전달합니까? 지금은 백분율을 사전에 넣고 있지만 이것은 최적이 아닌 것 같습니다.

이 갱신 진행 표시 줄을 소위입니다 :

-(void)updateAudioProgress:(Percentage)percent { 
    audio = percent; 
    if (!seekChanging) slider.value = percent; 

    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init]; 

    [myDictionary setValue:[NSNumber numberWithFloat:percent] forKey:@"myPercent"]; 


    [NSTimer scheduledTimerWithTimeInterval:5 
            target:self 
            selector:@selector(myTimerMethod:) 
            userInfo:myDictionary 
            repeats:YES]; 
    [myDictionary release]; 
} 

이 처음 5 초 정도라고하지만 메서드가 호출 될 때마다 업데이트됩니다.

항상 그렇듯이 의견과 조언을 부탁드립니다.

답변

0

UserInfo는 void *이므로 백분율로 int를 전달하거나 NSNumber 객체에 대한 포인터 만 전달할 수 있습니다. NSDictionary 일 필요는 없습니다. 그 외에도 사전을 사용하는 것이 표준 접근 방식이며 과도한 오버 헤드가 없습니다.

이 메서드가 호출 될 때마다 5 초 반복하여 새 타이머를 만드는 것이므로 의도 한 것이거나 그렇지 않을 수도 있습니다. 반복 타이머 (또는 정상 타이머)를 만들 때는 필요하지 않을 때 타이머를 무효화해야합니다.

+0

답변 해 주셔서 감사합니다. –