1

我有一个 ScrollView,其中包含一个 imageView(使用 addSubView 以编程方式创建)和一个视图,其中包含用于更改图片的分段控件。我添加了用于缩放的手势识别器。分段控件的水平位置是固定的。当我尝试单击分段控件并且图像放大太多时会出现问题。它不起作用。如果缩放级别很小,它会继续工作并在图像之间变化。
下面的两个屏幕截图说明了这种情况:1)分段控制工作时和 2)它不工作时。

http://cs617220.vk.me/v617220757/e375/hvRdXNe9SBY.jpg http://cs617220.vk.me/v617220757/e36e/E4auq4-kFL4.jpg

我认为,问题出在视图的层次结构中,当添加的子视图不与分段控制的视图重叠时 - 它可以工作,而当重叠时 - 它会停止。我试图将 imageView 放在底部,这是代码:

[self.scrollView addSubview:self.imageView];
[self.scrollView sendSubviewToBack:self.imageView];

但这无济于事,问题仍然存在。如何将 imageView 放在堆栈的底部?

更新评论:我在 UIScrollView 和分段控件之间有小的 UIView。看来,我设法抓住了问题:它是水平固定代码。我使用 Reveal 应用程序来发现这一点。两个屏幕截图显示了问题:
一切都好 这里分段控件放置在小的 UIView 上方。稍微缩放后,屏幕看起来像:
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;
}

解决方案:
我决定摆脱所有辅助视图并为分段视图实现垂直滚动,而不是阻止向一个方向滚动。代码在这里:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect frame = _floorSelector.frame;
    frame.origin.y = -scrollView.contentOffset.y;
    _floorSelector.frame = frame;
}

视图层次结构如下:
查看层次结构
因此,分段控件直接放置在主视图上,而不是滚动视图上。垂直滚动时,它也会滚动,但水平滚动时,它不会滚动。感谢帮助。
由于 Departamento B 帮我解决了这个问题(这是他的主意),我在他的回答上打了勾。

4

2 回答 2

1

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

原答案如下:


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

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

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

我一直在玩弄这个想法,当外部滚动视图抓取所有触摸时,您应该围绕转发手势进行大量编码。

于 2014-06-15T03:30:56.883 回答
0

怎么做

您可以通过将视图添加到第一个索引来将视图放在堆栈的底部:

[self.scrollViewinsertSubview:aView atIndex:0];

问题

但是当您在 scrollView 中有多个子视图时,滚动会出现一些问题。所以你应该怎么做:

解决方案

  1. 创建一个视图并将其添加到scrollView
  2. 在您刚刚创建的这个视图上,添加您的项目(yourImageView 在索引 0 处,然后添加您的分段视图)
  3. 按照下面的代码

代码

//adding your view, as a subview of scrollView
[self.scrollView addSubview:self.yourView atIndex:0];

//On your view insert at index 0 your self.imageView
[self.yourView sendSubviewToBack:self.imageView atIndex:0];

//Now add your segmentedView
[self.yourView sendSubviewToBack:self.segmentedView];
于 2014-06-15T17:25:48.373 回答