UIViews 是 UIScrollView 的子视图。如何跟踪子视图在定义的矩形内?

Posted

技术标签:

【中文标题】UIViews 是 UIScrollView 的子视图。如何跟踪子视图在定义的矩形内?【英文标题】:UIViews are subviews of UIScrollView. How to trace that a subview is inside defined rectangle? 【发布时间】:2011-07-16 19:19:36 【问题描述】:

我将 UIViews 添加到 UIScrollView 一个下一个。当用户滚动并且当前 UIView 传递一个矩形时,它必须更改 UIView 的背景颜色。 如何跟踪子视图在定义的矩形内?

- (void) showViews 

    CGRect scrollRect = CGRectMake(0.0f, 44.0f, 704.0f, 704.0f); 

    UIScrollView *aScroll = [[UIScrollView alloc] initWithFrame:scrollRect];
    float yPos = 20.0f;
    //the rectangle to trace intersection
    CGRect intersectRect = CGRectMake(0.0f, 200.0f, 704.0f, 400.0f);

    for (UIView* view in arrayOfViews) 
        CGRect viewRect = CGRectMake(100.0f, yPos, 320.0f, 480.0f); 
        view.frame = viewRect;
        [aScroll addSubView:view];
        yPos = yPos + 340.0f;
        aScroll.contentSize = CGSizeMake(704.0, yPos);
     



【问题讨论】:

抱歉,请问您有什么问题? @PengOne 抱歉,问题在标题中。如何在定义的矩形内跟踪子视图? 滚动停止时或滚动时是否需要更改颜色? @Vince 我需要在滚动时更改它。当内部 intersectRect 颜色为蓝色时,外部颜色为绿色。只是为了简化。 【参考方案1】:

CGRectIntersection(); 可能就是你 looking 的用途。

它返回一个CGRect,即交集,可以为空(与CGRectIsNull() 一起检查)。如果矩形具有相同的大小,并且它们是一秒多一,则结果应该是具有相同大小的CGRect

【讨论】:

我知道函数,但我不明白要比较哪些帧,因为视图相对于 UIScrollView 定位。 是的,我在阅读您@PengOne 的评论后做出了这个回答,滚动视图代表不能处理这个问题吗? 我只是查看了委托方法,但找不到合适的方法。简单的任务,但还不知道:)【参考方案2】:

我在委托方法和属性 contentOffset 中找到了解决方案。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

    for (UIView *view in [[scrollView subviews] copy]) 

        if ((view.frame.origin.y - scrollView.contentOffset.y - self.controllStrip.frame.origin.y - self.controllStrip.frame.size.height) < 0  & 

             ( view.frame.origin.y + view.frame.size.height - scrollView.contentOffset.y - self.controllStrip.frame.origin.y) > 0) 

        view.backgroundColor = [UIColor grayColor];

        

        else 
            view.backgroundColor = [UIColor greenColor];

    


【讨论】:

以上是关于UIViews 是 UIScrollView 的子视图。如何跟踪子视图在定义的矩形内?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIScrollView 中的对象(UIViews)上执行翻转动画

UIScrollview 仅在拖动 uiviews 时滚动

UIScrollView 内的 MPMoviePlayerController 缩放问题

UIScrollView 和 UIView 的约束

在 Interface Builder 中,如何将 UIViews 添加到属于我创建的自定义视图的子视图?

使用 UIViews 创建水平滚动