首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查UView是否在Self.View范围内

检查UView是否在Self.View范围内
EN

Stack Overflow用户
提问于 2014-02-05 08:37:55
回答 2查看 878关注 0票数 0

我有一个视图,其中包含一个设计为水平滚动的UIScrollView。(因此UIScrollView比Self.View宽度更宽)

在UIScrollView中,我有一打UILables,我让用户以编程方式循环添加值,当以编程方式选择下一个UILable时,如果它越界,我会更改UIScrollViews偏移量,以确保UILabel正好出现在视图右侧。

这就是我目前检查UILabel位置,然后调整UILabel的偏移量的方法。

代码语言:javascript
复制
if (positionLabel.frame.origin.x > self.view.frame.size.width) 
{
    [axisContainerScrollView setContentOffset:CGPointMake(positionLabel.frame.origin.x+40 - self.view.frame.size.width, axisContainerScrollView.frame.origin.y) 
                                     animated:YES];
} 
else if (positionLabel.frame.origin.x > self.view.frame.size.width) 
{
    axisContainerScrollView setContentOffset:CGPointMake(0.0, axisContainerScrollView.frame.origin.y) 
                                    animated:YES];
}

所以positionLabel原点返回了它在UIScrollView中的位置的值,然后我改变了axisContainerScrollView的偏移量。这样做的唯一问题是,如果我滚动视图并选择其偏移量已经在视图内的UILabel,则将标签发送回右侧。

我想调整这个if语句,这样如果UILabel在self.view的范围内,那么我就不想改变偏移量。

EN

回答 2

Stack Overflow用户

发布于 2014-02-05 09:58:52

您可以将positionLabel.frame的坐标空间转换为与self.view相同的坐标空间,然后您可以使用函数进行您想要进行的比较。

就像这样-

代码语言:javascript
复制
// convert label frame
CGRect comparisonFrame = [axisContainerScrollView convertRect:positionLabel.frame toView:self.view];
// check if label is contained in self.view
BOOL isContainedInView = CGRectContainsRect(self.view.frame, comparisonFrame);

现在你有了一个BOOL,你可以放在任何条件中,你可以用它来检查。

票数 1
EN

Stack Overflow用户

发布于 2014-02-05 08:54:18

你看过[UIScrollView scrollRectToVisible:animated:]吗?这可能是一种更优雅的方法来做你想做的事情。我非常确定,如果矩形已经可见,它不会尝试滚动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21566487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档