检查UView是否在Self.View边界内

时间:2014-02-05 00:37:55

标签: ios objective-c uiview uiscrollview uilabel

我有一个包含UIScrollView的视图,该视图旨在水平滚动。 (因此UIScrollView比Self.View宽度宽)

在UIScrollView中我有十几个UILables,我让用户循环通过编程方式添加值,当以编程方式选择下一个UILable时,如果它超出界限我更改UIScrollViews偏移量以确保UILabel只显示在在视图右侧的左侧。

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

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的范围内,那么我不想改变偏移量。

2 个答案:

答案 0 :(得分:1)

您可以将 positionLabel.frame 的坐标空间转换为与 self.view 相同,然后您可以使用 CGRectContainsRect 功能进行你想做的比较。

之类的东西 -

// 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 :(得分:0)

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