2015-02-21 2 views
0

Я пытаюсь создать представление прогресса внутри моего заголовка, который постоянно обновляется в синхронизации с текущим ходом песни. У меня есть логика, что индикатор выполнения работает нормально. Просто я не могу заставить заголовок отображать progressView. Мне нужно получить точную ячейку для заголовка и установить прогресс в соответствии с моим таймером. Как показано ниже. Но приведенный ниже код приводит к сбою в доступе к определенному indexPath. Как получить доступ к indexPath для заголовка?ProgressView внутри заголовка CollectionView

- (void)updateTime 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; 
    CurrentArtistHeader *cell = (CurrentArtistHeader *)[self.collectionView cellForItemAtIndexPath:indexPath]; 

    float duration = CMTimeGetSeconds(self.player.currentItem.duration); 
    float current = CMTimeGetSeconds(self.player.currentTime); 
    cell.progressView.progress = (current/duration); 
} 

-(void)playCurrentArtist:(NSDictionary *)currentArtist 
{ 
    NSString *streamString = [currentArtist objectForKey:@"stream_url"]; 
    NSString *urlString = [NSString stringWithFormat:@"%@?client_id=%@", streamString,CLIENT_ID]; 
    NSURL *URLFromString = [NSURL URLWithString:urlString]; 
    self.player = [AVPlayer playerWithURL:URLFromString]; 
    [self.player play]; 
    self.playerIsPlaying = YES; 
    [self.collectionView reloadData]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:[self.player currentItem]]; 
    self.timer = [NSTimer scheduledTimerWithTimeInterval:.05 target:self selector:@selector(updateTime) userInfo:nil repeats:YES]; 
} 

ответ

0

Что нужно сделать, это пометить ячейку заголовка в viewForSupplementaryElement, а затем установить прогресс с помощью моего таймера с помощью помеченного заголовка.

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { 

     if ([kind isEqualToString:CSStickyHeaderParallaxHeader]) { 
      CurrentArtistHeader *header = [collectionView dequeueReusableSupplementaryViewOfKind:kind 
                    withReuseIdentifier:@"header" 
                      forIndexPath:indexPath]; 
      if (self.hostCurrentArtist[@"user"]) { 
       header.tag = 50; 
       } 
     } 
} 


- (void)updateTimeAndProgressView 
    { 
     if ([self.player currentItem]) { 
      CurrentArtistHeader *header = (CurrentArtistHeader *)[self.collectionView viewWithTag:50]; 
      float duration = CMTimeGetSeconds(self.player.currentItem.duration); 
      float current = CMTimeGetSeconds(self.player.currentTime); 
      header.progressView.progress = (current/duration); 

      if (header.progressView.progress == 1) { 
       [header.progressView setProgress:0.0 animated:YES]; 
      } 
     } 
    }