Наблюдатель вызвал функцию, не анимирующую

у меня есть функция

 -(void)setCurrentDuration:(double)currentTime
 {
     [self.slider setValue:currentTime animated:YES];
 }

в ячейке UIPhilosophyViewCell.

вызов

for (UIPhilosophyViewCell* cell in [self.customTableView visibleCells])
    {
        if ([cell isKindOfClass:[UIPhilosophyViewCell class]])
        {
            if ([TRIM(cell.dicData[@"id"]) isEqualToString:self.currentPlayingID])
            {
                [cell.audioProgressViewController setCurrentDuration:[self.audioPlayer currentTime]];
            }
        }
    }

анимирует изменение значения ползунка, но setCurrentDuration, вызываемый из селектора наблюдателя уведомлений, этого не делает. Любые предложения о том, что может быть проблемой?

добавление ячейки в центр уведомлений

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"playingProgress" object:nil];

и селектор

- (void) receiveTestNotification:(NSNotification *) notification
{
    NSDictionary* data = notification.object;
    if (data == nil)
    {
        data = [NSDictionary dictionary];
    }

    if ([[notification name] isEqualToString:@"playingProgress"] && [TRIM(self.dicData[@"id"]) isEqualToString:TRIM(data[@"id"])])
    {
        [self setCurrentDuration:[(NSNumber*)TRIM(data[@"currentDuration"]) doubleValue]];
    }
    else
    {
        [self setCurrentDuration:0];
    }
}

TRIM - это функция для получения ненулевого объекта или строки


person Sameer Azeem    schedule 28.08.2019    source источник
comment
Я бы предположил, что проблема связана с потоком; то есть убедитесь, что вы вносите изменения в поток пользовательского интерфейса из наблюдателя.   -  person trojanfoe    schedule 28.08.2019
comment
по-прежнему нет анимации после переноса [self setCurrentDuration:[(NSNumber*)TRIM(data[@currentDuration]) doubleValue]]; в dispatch_async(dispatch_get_main_queue(), ^() {}   -  person Sameer Azeem    schedule 28.08.2019


Ответы (1)


Перезагрузка или обновление TableView может остановить анимацию ячейки.

Итак, попробуйте перейти на использование [self.slider setValue:currentTime animated:NO];

И если setValue работает, вам нужно подумать о реализации анимации.

person irons163    schedule 29.08.2019
comment
TableView не перезагружается и с [self.slider setValue: currentTime анимированным: НЕТ]; анимации тоже нет, как и предполагалось, потому что НЕТ - person Sameer Azeem; 29.08.2019