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

问题描述 投票:0回答:2

我有一个视图,其中包含一个水平滚动的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的范围内,那么我不想更改偏移量。

ios objective-c uiview uiscrollview uilabel
2个回答
1
投票

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

就像是 -

// 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,你可以放置任何条件,你可以用来检查。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.