ios - 分段控件在放置在 UIImage 上方时不起作用

标签 ios objective-c uiview uisegmentedcontrol uiview-hierarchy

我有一个 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 应用程序找出了这一点。两个截图显示了问题:
Everything is OK 这里分段控件放置在小 UIView 的正上方。放大一点后屏幕看起来像:
UIView scrolls away, but segmented control stays at the right place
因此,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 层级如下:
View hierarchy
因此,分段控件直接放在主视图上,而不是 ScrollView 。当垂直滚动时,它也会滚动,但是当水平滚动时,它不会滚动。感谢您的帮助。
由于 Departamento B 帮助我解决了这个问题(这是他的想法),所以我在他的回答上打了勾。

最佳答案

有关最终实现的解决方案,请参阅原始问题。

原回答如下:


分别控制垂直和水平控制:

  • Root View
    • Scrollview -- 适合宽度,垂直滚动,高度通过捏合更新大小
      • 分段控制
      • Scrollview -- 高度适合父 ScrollView ,宽度通过捏合更新
        • 图像 -- 宽度和高度通过捏合更新

关注点:对角线滚动效果如何?我建议在重建整个屏幕之前先在一个简单的静态 Storyboard屏幕中尝试一下。

我一直在考虑这个想法,您应该围绕转发手势进行大量编码,因为外部 ScrollView 会捕获所有触摸。

关于ios - 分段控件在放置在 UIImage 上方时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24224928/

相关文章:

ios - App Store 接受 Swift 2.3 应用程序需要多长时间?

ios - 我如何知道哪一行代码导致我的 iOS 应用程序在 Xcode 9 中崩溃

ios - 多个 NSManagedObjectContext 或传递它?

iphone - 如何从 UINavigationController 堆栈上已有的 UIViewController 调用方法

ios - Autolayout - UIView 不能正确调整到 subview 的大小

ios - 我如何知道时间是否已经过去? swift

ios - 延迟在 UITableView 中插入行

ios - 监控 UITableViewCell 在屏幕上显示多长时间

ios - 如何使用 UIView 子类作为 UICollectionView 页脚

ios - 在 iOS 应用程序中查看主屏幕 (Swift)