我有一个UIImageView(建筑物的楼层地图)和带有手势识别器的UIScrollView,它允许我水平和垂直滚动,放大/缩小。一切正常,但建筑有两层,所以用户应该可以选择在它们之间切换。我决定在地图顶部使用分段控件来提供此选项 如果我将Segmented Control放到同一个UIScrollView中,它会垂直和水平滚动。我要问的是如何修复分段控件的水平位置,因此它只能垂直滚动地图 我试图使用此代码进行测试,如果它完全修复了分段控制的位置,但似乎它没有。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _floorSelector.frame;
frame.origin.y=50;
frame.origin.x= 160;
_floorSelector.frame = frame;
}
错误在哪里?谢谢你的回复!
答案 0 :(得分:0)
我认为这里的问题是你误解了如何在UIScrollView
中实现滚动,以及如何将事物放置在其坐标空间中。
滚动UIScrollView
时,其子视图的框架不会更改。相对于滚动视图,当滚动视图的contentOffset
和bounds
发生变化时,它们保持在相同的位置。为了使滚动视图的子视图显示为静态而其余部分滚动,您必须在边界更改时在滚动视图中更改其框架。
考虑到这一点,你现在正在做的只是重复在该子视图上设置相同的框架,这与没有做任何事情是一样的。
听起来你想要做的就是这样:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _floorSelector.frame;
frame.origin.x = 160 + scrollView.contentOffset.x;
_floorSelector.frame = frame;
}
请注意,我不会更改y轴上的任何内容,因为根据您的问题,不需要更改垂直滚动。