我的情况与这两篇文章类似(1907297 http://www.stackoverflow.com/questions/1907297 AND 689684 http://www.stackoverflow.com/questions/689684)并为了最简洁地描述我的情况,我展示了这个文本/图形布局(类似于您在 IB 中看到的,用于强制缩进级别的点)
UIView(主视图:320x460)
。 .UIScrollView(滚动视图:320x460)
。 .UIView(OverlayView:320x40)
。 。 。 .UIButton(任意按钮1)
。 。 。 .UILabel(任意标签1)
。 。 。 .UILabel(任意标签2)
这里的目标是让 OverlayView 作为一个统一的、透明的容器来在 ScrollView 顶部定位和显示一些任意按钮/标签。这些按钮/标签应保持静止,而下方 ScrollView 中的内容随着用户滑动而移动。按钮/标签有时可能会统一隐藏/取消隐藏/缩放(使用动画),这使得将它们全部分组在单个 OverlayView 中变得很方便。
问题在于,虽然 OverlayView 上的点击似乎可以很好地直接传输到底层 ScrollView,但滑动动作却没有任何效果。我可以通过覆盖来检测/拦截滑动
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
OverlayView 中的方法,但是我还没有找到一种方法以使其滚动的方式正确地将它们传递给 ScrollView。显然,touchesMoved 方法不是 UIScrollView 用于检测/解释滑动的方法?
我研究过的所有其他类似帖子要么找到了对我的情况不起作用的不同解决方案,要么只是没有解决。我还看到提到使用touchesShouldBegin/touchesShouldCancel,尽管我不明白这是如何实现的。无论如何,仍然希望社区有一些见解可以让我为此提出一个优雅的解决方案 - 任何示例代码都很棒。
预先感谢,乔尔。
附: - 我还应该提到,我需要使其与 iOS 3.0 兼容,所以我认为尝试使用 UIGestureRecognizers 已经过时了。
这是一个对我来说效果很好的更简单的解决方案:
在 OverlayView(UIScrollView 顶部的视图)中,将宽度和高度设置为 0(以便该视图在技术上不再位于滚动视图顶部)并设置 ClipsToBounds = NO(以便 OverlayView 的内容仍然显示)在滚动视图的顶部)。它对我来说就像一种魅力。
self.OverlayView.clipsToBounds = NO;
CGRect frame = self.OverlayView.frame;
self.OverlayView.frame = CGRectMake(frame.origin.x, frame.origin.y, 0, 0);
请注意,如果 OverlayView 包含交互式控件(如上面的按钮),那么它们将不再起作用。您需要将其移动到 UIScrollView 上方它自己的视图中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)