在 UIScrollView 中禁用子视图的滚动

Disable scroll of a subview in a UIScrollView

提问人:Louis Liang 提问时间:2/24/2022 更新时间:2/25/2022 访问量:672

问:

我在滚动视图的顶部有一个视频播放器视图,我添加了垂直滑动以调整音量和亮度功能。

问题是当我在播放器视图中滑动以调节音量时,滚动视图也会滚动,我该如何防止它?

iOS Swift Objective-C UIscrollView

评论

0赞 Shawn Frank 2/24/2022
如果你这样做了怎么办?yourScrollView.isScrollEnabled = false
0赞 Louis Liang 2/24/2022
一般来说,我确实需要视图滚动,只是想在调整音量时保持静止。
0赞 Shawn Frank 2/24/2022
用户如何在滚动视图中滚动?如果垂直手势是调整视频,那么用户会怎么做才能进入列表?除非滚动视图中的视频之间有一些空格,用户可以在其中滑动以垂直滚动。
0赞 Louis Liang 2/25/2022
嗨,肖恩,这是一个游戏信息页面,顶部附有游戏跟踪或视频,就像那些纵向模式下的 youtube 视频一样,不同之处在于当您在 Youtube 中向下滚动时,视频会保持在屏幕顶部,但我希望我的视频在我从视频播放器视图之外滚动时随着滚动视图向下移动, 当我从视频播放器视图中“滚动”时,我希望调整亮度/音量。

答:

1赞 Shawn Frank 2/25/2022 #1

这可能适用于您的用例。

我假设您在视频视图上添加了一个,因此在操作处理程序中,您可以在手势的状态为 or 时禁用滚动视图,并为任何任何状态(例如 或pan gesture.began.changedendedcancelled

我是这样做到的:

@objc
func didPan(_ panGesture: UIGestureRecognizer)
{
    scrollView.isScrollEnabled
        = panGesture.state != .began && panGesture.state != .changed
    
    /* The above is the same as these lines of code
    if panGesture.state == .began || panGesture.state == .ended
    {
        scrollView.isScrollEnabled = false
        return
    }
    
    scrollView.isScrollEnabled = true
    */
}

下面是使用此代码所发生情况的示例:

  1. 当我平移视频时,它会显示一个标签并阻止滚动视图移动
  2. 当我在滚动视图内但在视频区域(黄色区域)之外的另一个视图上平移时,它处于活动状态

AVPlayer in UIScrollView pan gesture on UIView ioS Swift