将UIView子类上的事件作为UIScrollView的子视图进行触摸



我已经实现了UIView的自定义子类,并重写了drawRect:方法。

在我的自定义视图中,我还希望手柄触摸,所以我还重写了touchesBegantouchesMovedtouchesEnded

这很好,但如果屏幕上的视图数量增加,那么我必须使用UIScrollView作为UIViewController的根视图。

一旦我的自定义UIView成为UIScrollView的子视图,那么它就不会接收到触摸事件。即使我在自定义UIView中移动手指,滚动视图也会滚动(我所有的触摸事件都会转到UIScrollView)。

我该如何解决这个问题?

有几种方法可以尝试:

  1. 尝试在UIScrollView:上设置以下属性

    scrollView.delaysContentTouches = NO;
    scrollView.canCancelContentTouches = NO;

    请在此处查看类似的SO问题/答案。

  2. 执行hitTest:withEvent:。看这里,看这里。

  3. 使用UIGestureRecognizer。看这里,看这里。

我个人建议使用UIGestureRecognizer,但这取决于您的具体情况(这些选项中的任何一个都可能适合您)。

看看另一个问题的回答:https://stackoverflow.com/a/4629821/193254

您还必须对滚动视图进行子类化,并实现hitTest:方法。

最新更新