检查子视图是否超出其父UIScrollView的内容大小的正确方法

时间:2014-02-20 04:06:51

标签: ios objective-c uiscrollview

我的应用程序有一个UIScrollView,其中包含一系列视频缩略图。当您触摸缩略图时,缩略图开始播放视频。但是,当您从滚动视图的可见屏幕区域滚动视图时,视频(显然)不会停止播放。

我希望能够检测到单元格何时离开滚动视图的可见屏幕,但我不确定观察此更改的正确方法是什么。我可以想到几个方面,但我想以“正确”的方式做到这一点。我应该怎么做呢?

2 个答案:

答案 0 :(得分:0)

我知道一种检查一帧是否在另一帧内的方法。我相信你可以在你的情况下使用它,但你需要设置自己的逻辑和放大器。相应地放置它。基本大纲指南如下:

if (CGRectContainsRect(self.view.bounds, videoThumbNailFrame)) {
    // videoThumbnail is Completely Inside
}else 
{

    if (videoThumbNailFrame.origin.y < self.view.bounds.origin.y) {
       //vertically outside 
    }

    if (videoThumbNailFrame.origin.x < self.view.bounds.origin.x) {
      //  horizontally outside
    }
}

可能您可以选择在scrollView的委托方法上执行此操作。 -(void)scrollViewDidEndDecelerating:(UIView *)scrollView

希望在某种程度上有所帮助。

答案 1 :(得分:0)

有两个步骤:

  • 计算scrollView的可见Rect

    CGRect visibleRect;
        visibleRect.origin = scrollView.contentOffset;
        visibleRect.size = scrollView.bounds.size;

  • 检查当前正在播放的视频帧是否与visibleRect相交。如果是,则将其保持播放,如果不是,我们将其停止。

    if(CGRectIntersectsRect(visibleRect,videoFrame)){
       //什么都不做 其他{
       //停止视频
    }