iOS:我可以以编程方式决定与哪个组件交互(滚动)吗?

Posted

技术标签:

【中文标题】iOS:我可以以编程方式决定与哪个组件交互(滚动)吗?【英文标题】:iOS: can I programmatically decide what component to interact with (scrolling)? 【发布时间】:2019-10-07 10:19:28 【问题描述】:

我的情况是我有两个可滚动的视图,一个是水平的,另一个是垂直的。有没有办法检测用户是否做了垂直或水平手势,并据此选择要与之交互的视图?

感谢您的帮助。

【问题讨论】:

你想根据方向对卷轴做点什么吗? 【参考方案1】:

您可以使用UIScrollViewDelegate 中的scrollViewWillBeginDragging 来获取滚动的方向。

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) 
    let translation = scrollView.panGestureRecognizer.translation(in: scrollView.superview)
    if translation.y > 0 
        // swipes from top to bottom of screen -> down
     else 
        // swipes from bottom to top of screen -> up
    

但由于此方法不返回滚动视图,因此您只会知道拖动了哪个滚动以及向哪个方向拖动。

【讨论】:

【参考方案2】:

请查看 isDirectionalLockEnabled 是否有帮助。 这有助于锁定滚动方向。

如果此属性为 YES 并且用户开始沿一个大致方向(水平或垂直)拖动,则滚动视图将禁用在另一个方向上的滚动。如果拖动方向是对角线,则滚动不会被锁定,用户可以向任意方向拖动,直到拖动完成。

【讨论】:

以上是关于iOS:我可以以编程方式决定与哪个组件交互(滚动)吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 13 上以编程方式滚动 SwiftUI ScrollView

iOS:以编程方式在以编程方式创建的滚动视图中创建标签

如何在IOS中以编程方式滚动UICollectionViewCell?

ios UITableViewCell 以编程方式在drawRect vs layoutSubviews中创建

使用自动布局iOS以编程方式滚动到特定页面/位置

以编程方式在iOS上滚动UIWebView