我有一个 ScrollView,其中包含一个 imageView(使用 addSubView 以编程方式创建)和一个 View ,其中包含用于更改图片的分段控件。我添加了用于缩放的手势识别器。分段控件的水平位置是固定的。当我尝试单击分段控件并且图像缩放太多时,就会出现问题。它不起作用。如果缩放级别很小,它会继续工作并在图像之间切换。
下面的两个屏幕截图说明了这种情况:1) 分段控制有效时和 2) 无效时。
http://cs617220.vk.me/v617220757/e375/hvRdXNe9SBY.jpg http://cs617220.vk.me/v617220757/e36e/E4auq4-kFL4.jpg
我认为,问题出在 View 的层次结构中,当添加的 subview 不与分段控件重叠 View 时 - 它有效,当重叠时 - 它停止。我试图将 imageView 放在底部,这是代码:
[self.scrollView addSubview:self.imageView];
[self.scrollView sendSubviewToBack:self.imageView];
但这于事无补,问题依旧。如何将 imageView 放到栈底?
评论更新:
我在 UIScrollView 和分段控件之间有小的 UIView。看来,我设法捕获了问题:它是水平固定代码。我使用 Reveal 应用程序找出了这一点。两个截图显示了问题:
这里分段控件放置在小 UIView 的正上方。放大一点后屏幕看起来像:
因此,UIView 作为图片的其余部分消失了,并且没有固定的水平位置。有趣的是,如果我将分段控件直接放在 UIScrollView 上,它可以工作,但位置不是水平固定的。这是代码:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _floorSelector.frame;
frame.origin.x = scrollView.contentOffset.x;
_floorSelector.frame = frame;
}
这不起作用(如果我尝试修复 UIView 的位置,而不是分段控件):
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _selectorView.frame;
frame.origin.x = scrollView.contentOffset.x;
_selectorView.frame = frame;
}
解决方案:
我没有阻止在一个方向上滚动,而是决定摆脱所有补充 View 并为分段 View 实现垂直滚动。代码在这里:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect frame = _floorSelector.frame;
frame.origin.y = -scrollView.contentOffset.y;
_floorSelector.frame = frame;
}
View 层级如下:
因此,分段控件直接放在主视图上,而不是 ScrollView 。当垂直滚动时,它也会滚动,但是当水平滚动时,它不会滚动。感谢您的帮助。
由于 Departamento B 帮助我解决了这个问题(这是他的想法),所以我在他的回答上打了勾。
最佳答案
有关最终实现的解决方案,请参阅原始问题。
原回答如下:
分别控制垂直和水平控制:
- Root View
- Scrollview -- 适合宽度,垂直滚动,高度通过捏合更新大小
- 分段控制
- Scrollview -- 高度适合父 ScrollView ,宽度通过捏合更新
- 图像 -- 宽度和高度通过捏合更新
- Scrollview -- 适合宽度,垂直滚动,高度通过捏合更新大小
关注点:对角线滚动效果如何?我建议在重建整个屏幕之前先在一个简单的静态 Storyboard屏幕中尝试一下。
我一直在考虑这个想法,您应该围绕转发手势进行大量编码,因为外部 ScrollView 会捕获所有触摸。
关于ios - 分段控件在放置在 UIImage 上方时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24224928/