gpt4 book ai didi

ios - 允许 UIScrollView 及其 subview 都响应触摸

转载 作者:IT王子 更新时间:2023-10-29 08:00:50 25 4
gpt4 key购买 nike

我希望我的 UIScrollView 及其 subview 都接收 subview 内的所有触摸事件。每个人都可以用自己的方式回应。

或者,如果点击手势被转发到 subview ,一切都会好起来的。

很多人都在这个一般领域苦苦挣扎。以下是许多相关问题中的一些:

How does UIScrollView steal touches from its subviews
How to steal touches from UIScrollView?
How to Cancel Scrolling in UIScrollView

顺便说一句,如果我在 ScrollView 中覆盖 hitTest:withEvent:,只要 userInteractionEnabled 为 YES,我就会看到触摸。但这并不能真正解决我的问题,因为:

1) 那个时候不知道是不是tap。
2) 有时我需要将 userInteractionEnabled 设置为 NO。

编辑:澄清一下,是的,我想以不同于平底锅的方式对待水龙头。水龙头应该由 subview 处理。平移可以通过 ScrollView 以通常的方式处理。

最佳答案

首先,免责声明。如果在 UIScrollView 上将 userInteractionEnabled 设置为 NO,则不会将触摸事件传递给 subview 。据我所知,除了一个异常(exception),没有办法解决这个问题:拦截 UIScrollView 的 super View 上的触摸事件,并将这些事件专门传递给 UIScrollView 的 subview >。不过老实说,我不知道你为什么要这样做。如果你想禁用特定的 UIScrollView 功能(比如......好吧,滚动)你可以很容易地做到这一点而无需禁用 UserInteraction。

如果我理解您的问题,您需要点击事件由 UIScrollView 处理并传递给 subview ?无论如何(无论手势是什么),我认为您正在寻找的是协议(protocol)方法 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:在协议(protocol) UIGestureRecognizerDelegate 中。在您的 subview 中,无论您拥有什么手势识别器,都可以在手势识别器上设置一个委托(delegate)(可能是首先设置 UIGestureReconginzer 的任何类)。重写上述方法并返回 YES。现在,这个手势将与任何其他可能“窃取”手势的识别器一起被识别(在您的情况下,点击)。使用此方法,您甚至可以微调代码以仅将特定类型的手势发送到 subview 或仅在特定情况下发送手势。它给了你很多控制权。请务必阅读该方法,尤其是这一部分:

This method is called when recognition of a gesture by either gestureRecognizer or otherGestureRecognizer would block the other gesture recognizer from recognizing its gesture. Note that returning YES is guaranteed to allow simultaneous recognition; returning NO, on the other hand, is not guaranteed to prevent simultaneous recognition because the other gesture recognizer's delegate may return YES.

当然,有一个警告:这只适用于手势识别器。因此,如果您尝试使用 touchesBegan:touchesEnded 等来处理触摸,您可能仍然会遇到问题。当然,您可以使用 hitTest: 将原始触摸事件发送到 subview ,但为什么呢?为什么在 UIView 中使用这些方法处理事件,当您可以将 UIGestureRecognizer 附加到 View 并免费获得所有这些功能时?如果您需要以标准 UIGestureRecognizer 无法提供的方式处理触摸,子类 UIGestureRecognizer 并在那里处理触摸。这样您就可以获得 UIGestureRecognizer 的所有功能以及您自己的自定义触摸处理。我真的认为 Apple 打算让 UIGestureRecognizer 替换开发人员在 UIView 上使用的大部分(如果不是全部)自定义触摸处理代码。它允许代码重用,并且在减轻哪些代码处理哪些触摸事件时更容易处理。

关于ios - 允许 UIScrollView 及其 subview 都响应触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485100/

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