У меня странная ситуация. У меня есть таблица с фотографиями. Я могу добавить новые фотографии в просмотр таблицы, используя некоторые кнопки. Перед появлением в табличном представлении ячейка должна отображать progressView на случайное количество секунд. Для этого я использую NSTimer. Все работает нормально, за исключением того, что при добавлении нескольких изображений одновременно, также отображается загрузка progressView в некоторых уже загруженных ячейках, если я прокручиваю вверх. Я проверил свое условие if (единственный способ начать загрузку) с помощью NSLog, оно показывает только индексы загрузки ячеек. Я ценю вашу помощь:)
Вот код для cellForRowAtIndexPath:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"photoCell"];
PhotoCell *photoCell = (PhotoCell *)cell;
//if there is active timer
if([self.activeTimerIndexArray containsObject:indexPath]){
[photoCell.resultImageV setHidden:YES];
UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];
progressView.frame = CGRectMake(photoCell.resultImageV.frame.origin.x, photoCell.resultImageV.frame.size.height/2, photoCell.resultImageV.frame.size.width, photoCell.resultImageV.frame.size.height);
[progressView setTag:11];
[photoCell.contentView addSubview:progressView];
}
UIImage *img = (UIImage *)[self.resultArray objectAtIndex:indexPath.row];
photoCell.resultImageV.image = img;
return cell;
Вот код для метода updateTimer:
Timer *timerInfo = timer.userInfo;
NSIndexPath *index = timerInfo.forIndex;
PhotoCell *cell = [self.tableView cellForRowAtIndexPath:index];
if(timerInfo.time >= timerInfo.totalTime)
{
dispatch_async(dispatch_get_main_queue(), ^{
UIProgressView *prg = [cell viewWithTag:11];
[prg removeFromSuperview];
[cell.resultImageV setHidden:NO];
});
[timer invalidate];
//no longer active timer
[self.activeTimerIndexArray removeObject:timerInfo.forIndex];
}
else
{
timerInfo.time += 0.01;
float progress = timerInfo.time/timerInfo.totalTime;
dispatch_async(dispatch_get_main_queue(), ^{
UIProgressView *prg = [cell viewWithTag:11];
prg.progress = progress;
});
}
UPDATE
Благодаря @vadian я обновил свою модель, создал простой класс для таймеров и использовал массив timerInfo, как указано выше.