iOS 8,Swift。我试图在水平滚动视图上有一个垂直滚动视图。他们都是UIScrollViews。垂直滚动视图在那里允许从底部滑动视图。有一个间隔视图在顶部使用自动布局,是1像素宽,但屏幕高度。
这很好,直到基础视图本身就是支持水平滚动的滚动视图。
不知何故,我需要将左/右pan手势传递到子视图,即UIScrollView。
当前,顶层垂直滚动视图捕获所有手势,而不让底层水平滚动视图看到事件。
我尝试过hitTest、gestureRecognizer委托方法、滚动视图子类的各种组合,但是已经想出了一个很好的干净解决方案。
当点击垂直滚动视图顶部的空空间时,我可以使用hitTest将事件传递给底层的水平滚动视图,但是垂直滚动视图永远不会处理pan或滑动以显示应该出现在滑动向上的内容。
理想情况下,我希望顶部垂直滚动视图只处理向上/向下,当垂直滚动视图位于顶部时,将左/右滚动视图传递到子视图。
发布于 2015-08-20 15:45:06
下面是一个简单的方法,可以帮助您解决问题:
Obj-C
创建不可见的滚动视图,然后根据覆盖两个基本滚动视图的顶部不可见滚动视图上的触摸事件的偏移量,将不可见滚动视图或触摸事件的偏移量传递到下面的滚动视图:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
[_verticalScrollView setContentOffset:CGPointMake(0, _insivibleScrollView.contentOffset.y)];
[_horizontalScrollView setContentOffset:CGPointMake(_insivibleScrollView.contentOffset.x, 0)];
}您创建了一个不可见的滚动视图,所谓不可见,我的意思是,您可能必须将alpha值保持在0.01左右。您不允许对水平滚动视图和垂直滚动视图进行用户交互,而是使用上面的方法,以便当用户触摸不可见滚动视图时,将这些触摸转换到下面的滚动视图,该滚动视图被锁定,仅响应不可见滚动视图的偏移量。正如你在你的评论中所说的,这个答案可能更适合你的个人需求,但这是一个基本的“基础”,它会给你带来你想要的效果。
Swift:
与上面的方法相同,但下面是您需要的函数:
func scrollViewDidScroll(scrollView: UIScrollView!) {
verticalScrollView.contentOffset = CGPointMake(0, invisibleScrollView.contentOffset.y)
horizontalScrollView.contentOffset = CGPointMake(invisibleScrollView.contentOffset.x, 0)
}https://stackoverflow.com/questions/32062988
复制相似问题