我有一个包含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的范围内,那么我不想改变偏移量。
答案 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:]
了吗?做你想做的事可能是一种更优雅的方法。我很确定如果矩形已经可见,它将不会尝试滚动。