固定分段控制的水平位置

时间:2014-06-01 02:14:26

标签: ios objective-c uiscrollview uisegmentedcontrol

我有一个UIImageView(建筑物的楼层地图)和带有手势识别器的UIScrollView,它允许我水平和垂直滚动,放大/缩小。一切正常,但建筑有两层,所以用户应该可以选择在它们之间切换。我决定在地图顶部使用分段控件来提供此选项 如果我将Segmented Control放到同一个UIScrollView中,它会垂直和水平滚动。我要问的是如何修复分段控件的水平位置,因此它只能垂直滚动地图 我试图使用此代码进行测试,如果它完全修复了分段控制的位置,但似乎它没有。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect frame = _floorSelector.frame;
    frame.origin.y=50;
    frame.origin.x= 160;
    _floorSelector.frame = frame;

}

错误在哪里?谢谢你的回复!

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是你误解了如何在UIScrollView中实现滚动,以及如何将事物放置在其坐标空间中。

滚动UIScrollView时,其子视图的框架不会更改。相对于滚动视图,当滚动视图的contentOffsetbounds发生变化时,它们保持在相同的位置。为了使滚动视图的子视图显示为静态而其余部分滚动,您必须在边界更改时在滚动视图中更改其框架。

考虑到这一点,你现在正在做的只是重复在该子视图上设置相同的框架,这与没有做任何事情是一样的。

听起来你想要做的就是这样:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect frame = _floorSelector.frame;
    frame.origin.x = 160 + scrollView.contentOffset.x;
    _floorSelector.frame = frame;

}

请注意,我不会更改y轴上的任何内容,因为根据您的问题,不需要更改垂直滚动。