拖动包含 UIScrollView 的 UIView

Posted

技术标签:

【中文标题】拖动包含 UIScrollView 的 UIView【英文标题】:Drag UIView containg UIScrollView 【发布时间】:2014-07-15 09:51:49 【问题描述】:

我在尝试拖动其中包含 UIScrollView 的 UIView 时遇到了麻烦。 UIView 从屏幕底部向上拖动,当它到达顶部时,您可以在其中使用 UIScrollView。当用户滚动到 UIScrollView 的顶部时,UIView 应该用手指向下拖动。

当你点击一个图钉时,它应该像谷歌地图弹出窗口一样工作。

更新:我可以拖动 UIView 工作 (touchesMoved) 来改变 Y 值。我遇到问题的主要功能是当用户在 UIScrollView 内部触摸时向下拖动 UIView。我希望用户仍然能够像往常一样拖动滚动视图,直到它到达顶部,此时拖动操作应该将父 UIView 向下移出屏幕。

更新 2:这是您建议关闭用户交互的代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
    if(scrollView.contentOffset.y<=0)
        scrollView.userInteractionEnabled = NO;
    else
        scrollView.userInteractionEnabled = YES;
    

【问题讨论】:

这个问题没有一个答案。这是一个完整的功能。请让您的问题更具体。只是为了回答,您需要使视图可通过手指拖动,这意味着在视图本身上添加手势识别器或覆盖 touchesBegun、touchesEnded、touchesCanceled 和 touchesMoved。然后,您将需要将滚动视图连接到视图并告诉它何时获取触摸所有权的逻辑。您能否将您的问题更具体一点,以便我们为您提供帮助?谢谢 【参考方案1】:

大多数应用通过使用 UIScrollViewDelegate 方法 scrollViewDidScroll 来处理这种情况。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    // check the scrollView.contentOffset.y to see if you 
    // have reached the top of the scroll view.

然后您可以检查 contentOffset 并按照您想要的方式继续拖动代码。

【讨论】:

好的,然后我将如何将拖动动作从滚动视图转移到更改 UIView 的 Y @GeorgeGrover 您将在滚动视图上禁用 userInteraction,这将导致在包含视图上触发 touchesMoved。此时,您的代码应该可以按预期工作。 谢谢,但现在的问题是您在禁用交互后无法滚动/拖动滚动视图...请参阅更新 2 了解我使用的代码 @GeorgeGrover 一旦视图离开屏幕,您可能希望在拖动代码中启用用户交互。此外,您正在检查 @GeorgeGrover 另外,如果您喜欢我的回答,请不要忘记投票并接受。

以上是关于拖动包含 UIScrollView 的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 [UIScrollView removeFromSuperview] 崩溃了?

如何在 UIScrollView 中实现可拖动的 UIView 子类?

从 UIScrollView 后面的 unbutton 获取操作

UIScrollView 下拉父视图

UIPageViewController 中的 UIScrollView 滚动了多少?

iOS 7 的问题和滚动包含 UIButtons 的 UIScrollView