gpt4 book ai didi

ios - UIButtons 上方的 UIScrollView

转载 作者:行者123 更新时间:2023-11-30 11:39:23 26 4
gpt4 key购买 nike

请查看下面我的 View 层次结构的简化版本。 ScrollView 具有清晰的背景并覆盖两个按钮(1 和 2):

UIView
| UIView
| UIButton 1
| UIButton 2
| UIScrollView (pinned to the superview edges - clear color)

一开始,我没有收到按钮的点击手势,因为 ScrollView 覆盖了它们。因此,我尝试将 ScrollView 放入容器 View 中并重写 pointInside 方法。

class PassThroughView: UIView {
//...
var buttons = [UIView]()

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return buttons.all { view in
return view.isHidden ||
!view.isUserInteractionEnabled ||
!view.point(inside: convert(point, to: view), with: event)
}
}

}

PassThoughView 包含按钮数组(1 和 2)。新的层次结构变为:

UIView
| UIView
| UIButton 1
| UIButton 2
| PassThoughView (pinned to the superview edges - clear color)
| UIScrollView (pinned to the superview edges - clear color)

这解决了问题的第一部分。我可以点击按钮并拖动 ScrollView 。

不好的部分是,除非我开始在按钮之外拖动,否则我无法再滚动。按钮有点大,这使得体验不太友好。

有没有一种方法可以允许点击手势遍历 ScrollView 并允许 ScrollView 接收平移手势,即使触摸是在其中一个按钮内启动的

编辑:

我希望这些图片能解释一下这样做的目的。我需要在所有 View 上放置一个 ScrollView ,以便可以增加可滚动区域。 (这对于我的情况来说非常具体)。用户可能想要在拍照按钮内启动滚动,如果手势是点击,我们就会拍照。

enter image description here

最佳答案

如果我理解你的问题是正确的,你需要手势依赖。 UIScollView 的平移手势应比 UIButton 的点击手势具有更高的优先级。

如果是 UIButton,我还不知道如何解决它,因为 UIButton 是一个 UIControl,而不使用 UIGestureRecognizer。但是如果您使用自己的 UIView 和 UITapGestureRecognizer 来代替,那应该是可能的。

使用属性从 UIScrollView 获取 UIPanGestureRecognizer

var panGestureRecognizer: UIPanGestureRecognizer { get } 参见 here

现在您可以使用

组合两个识别器

func require(toFail otherGestureRecognizer: UIGestureRecognizer) 请参阅 here

最终的代码行应如下所示:

tapGestureRecognizer.require(toFail: panGestureRecognizer)

关于ios - UIButtons 上方的 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com