触摸放置在UIScrollView中的UIView上没有调用的方法

ans*_*hul 4 uiscrollview uiview touches ios

我有一个自定义滚动视图,子类UIScrollView.我在viewcontroller nib文件中添加了一个滚动视图,并将其类更改为CustomScrollView.现在,这个自定义滚动视图(由xib制作)作为子视图添加到self.view上.

在这个滚动视图中,我有3个文本字段和1个UIImageView(名为signImageView)从xib添加.单击UIImageView(添加a TapGestureRecogniser)后,在自定义滚动视图上添加名为signView的UIView.我想允许用户在这个视图上签名,所以我创建了一个类Signature.m和.h,子类化UIView并实现了touches方法(touchesBegan,touchesMoved和touchesEnded)并初始化了signView,如下所示:

signView = [[Signature alloc]initWithFrame:signImageView.frame];
    [customScrollView addSubview:signView];
Run Code Online (Sandbox Code Playgroud)

但是当我开始在signView上签名时,视图会滚动,因此不会调用touches方法.

我尝试在self.view上添加signView而不是自定义滚动视图,但在这种情况下,当我开始滚动时,视图仍然粘在固定位置.(在这种情况下,它的框架保持固定)

Rok*_*arc 7

尝试设置canCancelContentTouchesscrollViewNOdelaysContentTouchesYES.

编辑:

我看到这里回答了类似的问题在iPhone上使用Cocoa进行拖拽和扫描(答案完全相同).

如果用户水龙头正持有signView(约0.3-0.5秒),那么视图的touchesBegan:方法被解雇,从这一刻起,所有的事件去的signView,直到touchesEnded:被调用.

如果用户快速刷槽,signViewUIScrollView接管.

由于您已经实现了已实现方法的UIView子类,因此touchesBegan:您可以以某种方式向用户表明您的应用已准备好供他签名(" 绿灯 "等效).

你也可以touchesEnded:用来关掉这个绿灯.

如果添加它可能是更好signImageView的作为subViewsignView(而不是向customScrollView)和隐藏它,当touchesBegan:被触发).您将添加signViewcustomScrollview添加signImageView现有代码的相同位置.

有了这个,你做到这一点有效的只有一个subView在那个地方(为了更好的触控传递效率.而且你可以做到这一点的绿色光被取消隐藏效果signImageViewtouchesBegan:/touchesEnded:

如果这个app-behavior(0.3-0.5s延迟)是不可接受的,那么你还需要子类UIScrollView.有维涅什压倒一切的方法UIScrollViewtouchesShouldBegin:可能前来救援.在那里你可能会检测到是否有触摸signView并立即将其传递给该视图.