视频正在多个小区中播放

时间:2016-08-12 11:04:34

标签: ios objective-c mpmovieplayercontroller uicollectionviewcell

我在集合视图单元格中播放视频时遇到问题

  1. 我的问题是我只想在一个单元格中播放视频,但它正在所有单元格中播放。
  2. 单元格包含视频和图片。
  3. 当数据源是图像时,我想要图像视图和视图上的图像必须隐藏。
  4. 当数据源是视频网址时,我想要在视图和图像视图上显示图像时必须隐藏。
  5. 我使用了以下代码。

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    
     //[self.collection reloadData];
    homeceeCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    
    
    UIImage *image;
    NSInteger row = [indexPath row];
    NSURL *furl;
    
    NSLog(@"indexpath = %ld", (long)row);
    
    if ([app.array1[row] isKindOfClass:[NSURL class]])
    {
          furl=app.array1[row];
        cell.movieplayer = [[MPMoviePlayerController alloc]initWithContentURL:app.array1[row]];
    
        cell.videoview.hidden=NO;
        cell.img.hidden=YES;
        cell.movieplayer.view.frame = cell.img.frame;
        [cell.videoview addSubview:cell.movieplayer.view];
    
        NSLog(@"%@",cell.movieplayer);
        [cell.movieplayer play];
    
                NSLog(@"%@",cell.movieplayer);
    }
    else {
        if ([app.array1[row] isKindOfClass:[UIImage class]]) {
            image= app.array1[row];
              cell.videoview.hidden=YES;
        }
        else {
            image = [UIImage imageNamed:app.array1[row]];
              cell.videoview.hidden=YES;
    
        }
    
        cell.img.image = image;
        cell.videoview.hidden=YES;
    
    }
    
    cell.text.text=[app.tarray1 objectAtIndex:indexPath.row];
    return cell;
    

    }

    • app.array1是包含图片和视频网址的数组。
    • cell.img是我在集合视图单元格中声明的图像视图。
    • cell.videoview是我在集合视图单元格中声明的视图。

    请帮我解决这个问题,如果问题不明确请留言我会解释。谢谢你的回答

1 个答案:

答案 0 :(得分:0)

创建UICollectionViewCell子类,然后您应该覆盖prepeareForReuse方法 - 将单元格设置为默认模式并删除所有视频播放器内容。在cellForItemAtIndexPath方法中使用您的子类。

<强>夫特

override func prepareForReuse() {
    super.prepareForReuse()

    //set cell to initial state here 
}

Objective-C

- (void) prepareForReuse
{
    [super prepareForReuse];

    //set cell to initial state here 
}

您可以在UICollectionReusableView课程参考中找到更多信息。

  

执行必要的清理以准备视图以便再次使用。

     

当视图出列以供使用时,在相应的dequeue方法将视图返回到代码之前调用此方法。子类可以覆盖此方法并使用它将属性重置为其默认值,并且通常使视图可以再次使用。