NSTimer для сглаживания позиции воспроизведения - PullRequest
0 голосов
/ 23 апреля 2010

У меня есть аудиоплеер, и я хочу показать текущее время воспроизведения. Я использую пользовательский класс игры.

Приложение загружает mp3 в файл, а затем воспроизводит из файла после загрузки 5%. У меня есть обновление представления прогресса, когда файл воспроизводится, и обновляет метку при каждом вызове для просмотра прогресса. Тем не менее, это отрывисто ... иногда даже возвращаясь на цифру или две назад.

Я подумывал об использовании 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 секунд, но затем обновляется при каждом вызове метода.

Как всегда, комментарии и указатели приветствуются.

1 Ответ

0 голосов
/ 23 апреля 2010

UserInfo является пустым *, так что вы можете просто передать int для процента напрямую или просто указатель на ваш объект NSNumber;это не обязательно должен быть NSDictionary.Кроме того, использование словаря является стандартным подходом и не требует чрезмерных затрат.

Обратите внимание, что вы создаете новый таймер с 5-секундным повторением при каждом вызове этого метода, который можетне будь твоим намерением.При создании повторяющихся таймеров (или обычных) вы должны сделать их недействительными, когда они не требуются.

...