在UITableView中完全可见时播放视频

时间:2014-05-23 11:52:13

标签: ios objective-c video uitableview

嗨我想在单元格完全可见时在UITableView中播放视频URL。 怎么可能?

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *simpleTableIdentifier = @"SimpleTableCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

     if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}



 //Play the movie now
NSURL *videoURL =[NSURL fileURLWithPath:myURL];
MPMoviePlayerViewController *videoPlayerView = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];
videoPlayerView.moviePlayer.fullscreen=TRUE;

[self presentMoviePlayerViewControllerAnimated:videoPlayerView];
[videoPlayerView.moviePlayer play];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
 return cell;

 }

1 个答案:

答案 0 :(得分:0)

您可以在

上准备视频
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

在cellForRowAtIndexPath方法中,通过使用

编译索引路径来检查当前单元格是否可见
NSArray *visiblePaths = [tableView indexPathsForVisibleRows];

如果是,则播放即使不停止播放。根据视频和视频数量,您可以使用一些缓存机制扩展此方法。如果您认为在willDisplayCell上加载视频会延迟,则可以预加载所有视频。

帮助函数查找单元格是否可见。您可以在cellForRowatIndexpath中调用此函数。

- (BOOL)isIndexPathVisible:(NSIndexPath*)indexPath
{
NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];

for (NSIndexPath *currentIndex in visiblePaths)
{
    NSComparisonResult result = [currentIndex compare:currentIndex];

    if(result == NSOrderedSame)
    {
        NSLog(@"Visible");
        return YES;
    }
}

return NO;
}