UIScrollView 通过在框架内拖动来滚动

Posted

技术标签:

【中文标题】UIScrollView 通过在框架内拖动来滚动【英文标题】:UIScrollView's scrolling by dragging within a frame 【发布时间】:2013-07-12 21:57:41 【问题描述】:

我有一个包含一堆子 UIScrollViews 的父 UIScrollView,每个滚动视图都可以向各个方向滚动。在每个child的顶部,都有一个UIView,是parent的子view。

我只想在用户从上面的 UIView 之一拖动时启用父级滚动。

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

您可以尝试使用 touchesBegan: 检测用户触摸的位置,如果它位于其中一个 UIView 中,那么您可以禁用所有子 scrollView 的滚动(甚至交互)。所以在代码中:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

        //check if touch is in one of the UIViews

        //if so disable child UIScrollView interaction like so:
        childScrollView.scrollEnabled = NO;
    

然后在 touches end 方法中重新启用子 scrollViews 上的滚动。

【讨论】:

这是我正在寻找的解决方案,但不幸的是,touchesBegan: 在我滚动时不会被调用。【参考方案2】:

好吧,我终于找到东西了!通过覆盖父滚动视图的回调-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event

`-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event

if (CGRectContainsPoint(myFrame, point))

    self.scrollEnabled = YES;

else

    self.scrollEnabled = NO;


return [super hitTest:point withEvent:event];

`

【讨论】:

以上是关于UIScrollView 通过在框架内拖动来滚动的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 仅在拖动 uiviews 时滚动

拖动子视图时防止 UIScrollView 滚动

具有活动和非活动区域的 UIScrollView

在 UIScrollView 中拖动 UIButtons?

如何在 UIScrollView 中同时拖动和移动某些东西并滚动

UIScrollView 缩放到矩形