2013-09-28 194 views
6

我正在播放UITableViewCell中的视频。为此,我使用以下代码:如何在iOS中的UITableViewCell中播放视频(自动播放)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *VideoCellIdentifier = @"VideoCell"; 

    NSDictionary *_response_data = [self.response objectAtIndex:indexPath.row]; 

    VideoCustomCell *cell = (VideoCustomCell *) [tableView dequeueReusableCellWithIdentifier:VideoCellIdentifier]; 

    if (cell == nil) { 
     NSArray *topLevelObjects; 
     topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"VideoCustomCell" owner:self options:nil]; 
     for (id currentObject in topLevelObjects){ 
      if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
       cell = (VideoCustomCell *) currentObject; 
       cell.delegate = self; 
       break; 
      } 
     } 
    } 

    avPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:[_response_data valueForKey:@"media_id"]]] retain]; 
    avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer]; 
    avPlayerLayer.frame = cell.video_player_view.layer.bounds; 
    avPlayerLayer.videoGravity = AVLayerVideoGravityResize; 
    [cell.video_player_view.layer addSublayer: avPlayerLayer]; 
    [avPlayer play]; 

    return cell; 
} 

视频播放正常,但我一次只播放一个视频。播放完全可见的单元格视频。

回答

-4

你应该在didselect方法中编写你的游戏代码,以便你选择它只会玩别的游戏。

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // your player code 
} 
+0

我不想在点击事件上做,我想在单元格可见时自动播放视频。 – San007

+0

所以,如果你想玩那样,你不应该写你的代码在cellforrowatindexpath并写在viewWillAppear并采取数组的循环,并从数组的索引播放它。获取歌曲的全部时间,并完成加载该阵列中的下一首歌曲。使用表格仅用于显示目的,以及某首歌曲正在播放的逻辑。 – user2826529

+1

你没有得到我的问题,谢谢你的努力。 – San007

3

使用这两种方法滚动和处理播放视频。当tableview停止滚动时,这两种方法将以任何一种方式调用

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    if(![scrollView isDecelerating] && ![scrollView isDragging]){ 

     [self playVideo]; 
    } 
} 

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ 
    if(!decelerate){ 

     [self playVideo]; 
    } 
} 


-(void)playVideo 
{ 
    if(aryTableData.count==0){ 
     return; 
    } 

    for(UITableViewCell *cell in [tblView visibleCells]) 
    { 
     VideoCell *ccell = (VideoCell*)cell; 

     CGRect ccellRect = [APP_DEL.window convertRect:ccell.bounds fromView:ccell]; 

     // NSLog(@"--Cell frame %f",ccellRect.origin.y); 

     //Set Condition of cell visible within some range 
     if(ccellRect.origin.y>-200) 
     { 
      // Handle Video Play 

      int row = [[tblView indexPathForCell:ccell] row]; 
      NSString *strUrl = [[aryTableData objectAtIndex:row] valueForKey:@"video_url"] ; 
      [ccell startVideoFromURL:strUrl]; //You can handle video play in cell or table view 
     } 
    } 
} 
+0

converRect方法是什么? –