2013-09-28 199 views
6

Tôi đang phát video trong UITableViewCell. Đối với điều đó, tôi đang sử dụng mã sau:Làm cách nào để phát video (tự động phát) trong UITableViewCell trong iOS

- (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; 
} 

Video đang phát đúng cách nhưng tôi chỉ muốn phát một video mỗi lần. Phát video của ô được hiển thị đầy đủ.

Trả lời

-4

Bạn nên viết mã của mình để chơi theo phương thức didselect để bạn chọn hàng nó sẽ chỉ phát không phải phương thức khác.

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

Tôi không muốn thực hiện sự kiện nhấp, tôi muốn tự động phát video khi ô hiển thị. – San007

+0

Vì vậy, nếu bạn muốn chơi như vậy bạn không nên viết mã của bạn trong cellforrowatindexpath và viết nó trong viewWillAppear và lấy vòng lặp cho mảng và chơi nó từ chỉ mục của mảng. Có được toàn bộ thời gian của bài hát và khi nó hoàn thành tải bài hát tiếp theo từ mảng đó. Sử dụng bảng chỉ cho mục đích hiển thị với một số logic mà bài hát đang chơi. – user2826529

+1

Bạn không nhận được sự cố của tôi, Cảm ơn bạn đã nỗ lực. – San007

3

Sử dụng hai phương pháp này để cuộn và xử lý video phát. Hai phương pháp này sẽ gọi theo cả hai cách khi chế độ xem bảng ngừng di chuyển

-(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

phương pháp converRect là gì? –