我有一个视图,其中包含一个水平滚动的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的范围内,那么我不想更改偏移量。
您可以将位置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,你可以放置任何条件,你可以用来检查。
你看过[UIScrollView scrollRectToVisible:animated:]
吗?做你想做的事可能是一种更优雅的方法。我很确定如果矩形已经可见,它将不会尝试滚动。