【问题标题】:Detect touches on a UIView inside UIScrollView preferably with Interaction disabled检测 UIScrollView 内的 UIView 上的触摸,最好禁用交互
【发布时间】:2012-10-12 19:17:12
【问题描述】:

我有一个UIScrollView,里面有一些UIViews。 我正在尝试做的是在 UIView 被触摸/未触摸时捕获触摸事件。

我遇到的问题是,UIScrollView 似乎吞噬了所有的触摸事件,特别是如果你在 UIView 上持有太久。

我希望 UIScrollView 在自动滚动时禁用 userInteraction。

这可能吗?

我尝试将UIViews 子类化,但从未在其中调用过触摸事件。

【问题讨论】:

    标签: objective-c ios xcode cocoa-touch uiscrollview


    【解决方案1】:

    您可以将tapGesture 附加到您的scrollview 上,其中包含以下内容:

       UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureUpdated:)];
       tapGesture.delegate = self;
       tapGesture.numberOfTapsRequired = 1;
       tapGesture.numberOfTouchesRequired = 1;
       [self addGestureRecognizer:_tapGesture];
    

    然后在您的- (void)tapGestureUpdated:(UITapGestureRecognizer *)tapGesture 方法中,您有责任确定触摸的位置并确定您的某个子视图是否被选中。然后,您可以在委托上调用一个方法,通知特定视图已被触摸。

    【讨论】:

    • 这个方法只能调用一次吗?如果时间触摸在 UIView 上,我想要长度,所以需要 touchStart 和 touchEnd 事件。
    • tapGesture 参数有一个状态,例如 UIGestureRecognizerStateBegan 或 UIGestureRecognizerStateEnd 我会用它来检测你感兴趣的两个触摸事件
    • 请确保您阅读了 Tapgesture 上的官方文档:developer.apple.com/library/ios/#documentation/uikit/reference/…
    • 谢谢,我明天早上试试这个方法。
    【解决方案2】:

    也许重新排序您的视图,以便应用程序可以识别具有与之关联的触摸识别器对象的视图。将它在文档大纲中移动到顶部(滚动视图)

    【讨论】:

    • 我确实想到了这一点,但我认为将 UIView 移动到与滚动视图相同的速度会非常困难
    • @Darren 嗯。将 UIButton 设置为 custom 并将 alpha bg 设置为 0.0 怎么样?另外,如果你添加了一个 UIView,它不一定要随 UIScrollView 一起移动...
    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 2013-04-12
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多