最近要做个信息登记界面,在scrollView中添加了多个button和一个自定义的view(画板)来实现签名效果,画板中实现了touchBegin,touchMove等触摸事件方法。为了使button能响应scrollView的滑动触摸事件在网上找了很多资料,结果要么就是手指放在button上能滑动,但放在画板上就不能画画或者能画画但button不能滑动,没有两全其美的方法,摸索了很久最终找到了解决方法。先看图。

先说下常见的方法self.scrollView.panGestureRecognizer.delaysTouchesBegan = YES;设置scrollView的延迟接收点击触摸事件,此时button能实现滑动和点击效果,但由于画板需要接收点击触摸事件才能开始画,故需要先长按,达不到我们要的效果,故pass。

另外一种方法self.scrollView.delaysContentTouches = YES;此时画板画画没有延迟,但button无法识别滑动触摸事件,滑动时会直接实现点击。

##解决方法 既要能实现button点击效果,又要实现画板画画无延迟,那么解决办法来啦~ 首先要设置scrollView的两个属性

    self.scrollView.canCancelContentTouches = YES;self.scrollView.delaysContentTouches = NO;
复制代码
  • delaysContentTouches表示scrollView的子控件响应触摸事件是否有延迟,NO表示立即响应,YES表示延迟响应;
  • canCancelContentTouches与delaysContentTouches相反,假如你设置canCancelContentTouches为YES,那么当你在UIScrollView上面放置任何子视图的时候,在子视图上移动手指的时候,UIScrollView会给子视图发送touchCancel的消息,既不响应触摸事件。而如果该属性设置为NO,ScrollView本身不 处理这个消息,全部交给子视图处理。

接着创建一个scrollView的分类,实现两个与上面属性配套的方法

#import "MainScrollView.h"
#import "HBSignView.h"  //自定义的view,实现画板功能
@implementation MainScrollView
//当设置canCancelContentTouches=YES时,触摸事件响应前会调用该方法
-(BOOL)touchesShouldCancelInContentView:(UIView *)view{if ([view isKindOfClass:[UIButton class]]) {return YES;}return [super touchesShouldCancelInContentView:view];
}
//在触摸事件开始相应前调用
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{if ([view isKindOfClass:[HBSignView class]]||[view isKindOfClass:[UIButton class]]) {return YES;}return NO;
}
复制代码

当设置canCancelContentTouches=YES时,除了touchBegin以外的所有触摸事件响应前会调用touchesShouldCancelInContentView:返回YES表示子视图不响应触摸事件,返回NO表示由子视图来处理触摸事件。而touchesShouldBegin:withEvent:inContentView:在每次触摸事件开始前都会调用,而且先于touchesShouldCancelInContentView: 于是先在touchesShouldBegin:withEvent:inContentView:判断当子视图是button或者是画板时,就由子视图自己处理触摸事件;接着在touchesShouldCancelInContentView:方法中,判断子视图是否是button,如果是则让其不响应触摸事件,由此过滤掉除了点击以外的所有触摸事件

demo请点击SimonYHB

转载于:https://juejin.im/post/5c638b83e51d456902054d2a

iOS实现ScrollView中子控件(Button,自定义View)的触摸事件响应相关推荐

  1. android 自定义view控件,Android 自定义View——自定义View控件

    Android给我们提供了大量的View控件,但这还是远远满足不了我们的要求,有时候开发所需要的控件形式是在Android提供的控件中是不存在,这就需要我们自己去定义一个.那么如何自定义控件? 学习自 ...

  2. android 圆环温度控件,Android自定义View分享——一个圆形温度显示器

    写在前面 笔者近来在学习Android自定义View,收集了一些不算复杂但又"长得"还可以的自定义View效果实现,之前分享过一个水平的进度条,如果你有兴趣的话可以看看: Andr ...

  3. 时间轨迹图控件,自定义View

    主要核心代码 package com.example.netprobe.view; import android.content.Context; import android.content.res ...

  4. android自定义曲线控件,Android自定义view进阶-- 神奇的贝塞尔曲线

    上一篇介绍了自定义view需要知道的基本函数.新开一篇献给借给我vpn的深圳_奋斗小哥. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/ ...

  5. Android开源绘画板(普通绘画模式和可缩放模式)——秒学自定义View和触摸事件原理...

    ScaleSketchPadDemo 博客园原文链接 www.cnblogs.com/jincheng-ya- 此项目包含两个模块 app1 为普通绘画板 app2 为可所发的绘画板 方便各位Andr ...

  6. Xamarin iOS教程之页面控件

    Xamarin iOS教程之页面控件 Xamarin iOS 页面控件 在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示.它是由小白点和滚动视图组成,可以用来控制翻 ...

  7. WPF Calendar 日历控件 样式自定义

    原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...

  8. 上滑ScrollView,实现控件顶部悬浮

    上滑ScrollView,实现控件顶部悬浮 因为看到网上的比较复杂,所以自己写了这篇,希望能够足够简单. 先看效果图,是不是你需要的: 不论怎么滑动屏幕内容,当蓝色部分到达顶部时,便会一直会显示在顶部 ...

  9. Android歌词显示控件TextView自定义

    1. 音乐播放,音乐播放,音乐播放放入服务中,那么App 退入后台音乐也可以播放 2. 歌词显示控件TextView自定义:    使用控件TextView,  为什么不用Listview,歌词不可以 ...

最新文章

  1. Unity WebGL 窗口自适应
  2. Qt工作笔记-profile中INSTALLS的使用
  3. eclips git中的add to Index无效解决
  4. 字符串匹配のKMP【@Abandon】
  5. leetcode 杨辉三角 III
  6. hdu 4864 task 贪心
  7. [itint5]交替字符串
  8. android实现按键找图功能,从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》更新20140603 _ 教程中心 - 按键精灵论坛...
  9. SDN开源框架:蝇量级选手Dragonflow究竟解决了什么问题
  10. linux的一页是多大
  11. 微信添加地址时选择地区功能是怎么实现的
  12. 差分隐私——高斯机制(The Gaussian Mechanism)
  13. Windows 文件夹修改为exe的原理和解决办法
  14. ros语音识别:pocketsphinx_continuous工作正常而gst-pocketsphinx不能识别相同语音的问题。
  15. iOS使用 Metrickit 收集崩溃日志
  16. Unity 3D之实现鱼竿模拟
  17. 关于地震预测的一个胡思乱想
  18. linux用户名设置,怎样更改linux的用户名
  19. Android 在主屏上生成快捷方式
  20. HTML页面 加载播放RTMP协议流和HLS协议流直播视频

热门文章

  1. 人工智能:技术本无罪,善恶在人心
  2. 谷歌对Deepfake亮剑:打造鉴假新工具,帮助媒体识别AI造假
  3. SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 -
  4. SAP MM A工厂下的PR可以转成B工厂下的PO?
  5. OpenCV对象检测实例
  6. 深度学习---TensorFlow学习笔记:搭建CNN模型
  7. 终于,LoRaWAN成全球物联网标准!LoRa将拿下LPWAN领域50%市场?
  8. 清华微电子副所长尹首一:中国AI芯片的技术路线最全面
  9. 智慧城市建设必须认真对待的几个问题(一):IPV6作为地址的问题
  10. 中科院5nm激光光刻弯道超车?95后本科生DIY纳米级光刻机?背后的真实情况