iOS 获取一个cell从屏幕中消失的时机

16 篇文章 1 订阅

需求

请添加图片描述
如上图,是一个竖视频页面,可以上下滑动,当当前视频从屏幕中滑出的时候,需要将播放页面移除,并暂停播放

代码

这里需要注意的是,偶尔的情况下,当前屏幕中的cell也会执行这个方法,所以这里需要添加一个判断,判断cell是否在屏幕中

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    /*
     这里是修复快速滑动的时候展示上一个播放画面的问题
     在cell 滚出屏幕的时候将播放画面
     移除,因为不将播放画面移除的话,在快速滚动的情况下,
     刚刚滚动到一个cell的时候,会有一瞬间展示的上一个视频的播放画面
    */
    CGRect rect = [self.tableView convertRect:cell.frame toView:self.view];
    /*
     CGRectEqualToRect(rect, self.view.bounds) ,发现偶发的情况会有当前正在展示的cell也会执行这个方法
     导致将要开始播放的时候停止播放,这里添加一个判断cell 是否在屏幕中
     **/
    if (self.currentIndex == indexPath.row && !CGRectEqualToRect(rect, self.view.bounds)) {
        [self.player.currentPlayerManager.view removeFromSuperview];
        [self.controlView pause];
        self.currentIndex = -10;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使 iOS 瀑布流的 cell 完全展示在屏幕,您需要做到以下几点: 1. 设置 UICollectionView 的 contentInset 属性,以便 cell屏幕边缘之间有足够的间距。 2. 在 UICollectionViewDelegateFlowLayout 协议的方法,设置每个 section 的 inset。 3. 在 UICollectionViewDelegateFlowLayout 协议的方法,确定每个 cell 的大小。 4. 在 UICollectionViewDelegate 协议的方法,使用 indexPathsForVisibleItems 属性获取当前可见的 cell。 5. 对于每个可见的 cell,使用 rectForItem(at:) 方法获取其在 UICollectionView 的 frame。 6. 使用 CGRectContainsRect() 方法检查 cell 的 frame 是否完全包含在屏幕。如果是,则 cell 完全展示在屏幕;如果不是,则需要调整 UICollectionView 的 contentOffset 属性以确保 cell 完全展示在屏幕。 以下是代码示例: ```swift func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { let visibleCells = collectionView.indexPathsForVisibleItems for visibleIndexPath in visibleCells { if let visibleCell = collectionView.cellForItem(at: visibleIndexPath) { let cellFrame = collectionView.convert(visibleCell.frame, to: collectionView.superview) let screenFrame = UIScreen.main.bounds if !CGRectContainsRect(screenFrame, cellFrame) { let offsetY = max(0, cellFrame.maxY - screenFrame.maxY) collectionView.setContentOffset(CGPoint(x: 0, y: collectionView.contentOffset.y + offsetY), animated: true) } } } } ``` 注意,这只是一个示例代码,具体实现可能因您的需求而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值