I am playing a video in UITableViewCell
. For that I am using the following code:
- (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;
}
The video is playing properly, but I want to play only one video at a time. Play the video of the cell which is fully visible.
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
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With