How do I play video (autoplay) in UITableViewCell in iOS

前端 未结 2 1516
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-28 11:51

I am playing a video in UITableViewCell. For that I am using the following code:

- (UITableViewCell *)tableView:(UITableView *)tableView cellFor         


        
相关标签:
2条回答
  • 2020-12-28 12:14

    Use this two method of scrolling and handle play video. This two method will call in either way when tableview stop scrolling

    -(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 讨论(0)
  • 2020-12-28 12:24

    VideoTableCell.h

    #import <UIKit/UIKit.h>
    #import <AVFoundation/AVFoundation.h>
    
    @interface VideoTableCell : UITableViewCell
    
    @property (strong, nonatomic) IBOutlet UIView *viewForVideo;
    @property (strong, nonatomic) IBOutlet UIImageView *imgThumb;
    @property (strong, nonatomic) IBOutlet UIButton *btnPlay;
    @property (strong, nonatomic) AVPlayerItem* videoItem;
    @property (strong, nonatomic) AVPlayer* videoPlayer;
    @property (strong, nonatomic) AVPlayerLayer* avLayer;
    
    @end
    

    VideoTableCell.m

    #import "VideoTableCell.h"
    
    @implementation VideoTableCell
    
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    
        return self;
    }
    - (void)layoutSubviews
    {
        [super layoutSubviews];
        [self.avLayer setFrame:CGRectMake(self.viewForVideo.frame.origin.x, self.viewForVideo.frame.origin.y, self.viewForVideo.frame.size.width,  self.viewForVideo.frame.size.height)];
    }
    
    @end
    

    VideoVC.h

    #import <UIKit/UIKit.h>
    #import <AVFoundation/AVFoundation.h>
    
    @interface VideoVC : UIViewController <UITableViewDataSource, UITableViewDelegate>
    
    @property (strong, nonatomic) IBOutlet UITableView *tblData;
    
    @end
    

    VideoVC.m

    #import "VideoVC.h"
    #import "VideoTableCell.h"
    
    @interface VideoVC ()
    {
        NSArray *arrVideo ;
        bool isScrolling;
        int index;
        BOOL fullvisible ;
    }
    @end  
    
    @implementation VideoVC
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];    
    
        arrVideo = [[NSArray alloc]initWithObjects:@"http://video/1.mp4",@"http://video/2.mp4", @"http://video/3.mp4", @"http://video/4.mp4", @"http://video/5.mp4", nil];
        fullvisible = YES;   
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return arrVideo.count;
    }
    
    - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        VideoTableCell *cell = [tableView dequeueReusableCellWithIdentifier:@"VideoTableCell"];
        if (cell == nil)
        {
            cell = [[[NSBundle mainBundle] loadNibNamed:@"VideoTableCell" owner:self options:nil]objectAtIndex:0];
        }
    
        int temp =  [self getVisibleIndex];
        if (temp == indexPath.row && fullvisible)
        {
            cell.imgThumb.hidden = YES ;
            //NSLog(@"fullvisible == 1");
            NSURL *url = [NSURL URLWithString:[arrVideo objectAtIndex:indexPath.row]];
    
            cell.videoItem = [AVPlayerItem playerItemWithURL:url];
            cell.videoPlayer = [AVPlayer playerWithPlayerItem:cell.videoItem];
            cell.avLayer = [AVPlayerLayer playerLayerWithPlayer:cell.videoPlayer];
    
            [cell.avLayer setBackgroundColor:[UIColor whiteColor].CGColor];
            // [cell.avLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
            [cell.contentView.layer addSublayer:cell.avLayer];
            [cell.videoPlayer play];
    
            [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        }
        else
        {
            cell.imgThumb.hidden = NO ;
            cell.videoPlayer = nil;
            [cell.avLayer removeFromSuperlayer];
            cell.videoItem = nil;
            [cell.videoPlayer pause];
        }
        return cell ;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 393 ;
    }
    
    - (int)getVisibleIndex
    {   
        for (NSIndexPath *indexPath in _tblData.indexPathsForVisibleRows)                                     
        {
            CGRect cellRect = [_tblData rectForRowAtIndexPath:indexPath];
            BOOL isVisible = CGRectContainsRect(_tblData.bounds, cellRect);
            if (isVisible)
            {
                index = (int)indexPath.row ;
            }
        }
        return index ;
    }
    
    - (void)scrollViewDidScroll:(UIScrollView *)aScrollView
    {
    
        NSArray* cells = _tblData.visibleCells;
        for (VideoTableCell* cell in cells)
        {
                NSIndexPath *path = [_tblData indexPathForCell:cell];
                index = (int) path.row;
                fullvisible = YES;
                [_tblData reloadData];
        }
    }
    
    0 讨论(0)
提交回复
热议问题