iOS实现ScrollView中子控件(Button,自定义View)的触摸事件响应
最近要做个信息登记界面,在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)的触摸事件响应相关推荐
- android 自定义view控件,Android 自定义View——自定义View控件
Android给我们提供了大量的View控件,但这还是远远满足不了我们的要求,有时候开发所需要的控件形式是在Android提供的控件中是不存在,这就需要我们自己去定义一个.那么如何自定义控件? 学习自 ...
- android 圆环温度控件,Android自定义View分享——一个圆形温度显示器
写在前面 笔者近来在学习Android自定义View,收集了一些不算复杂但又"长得"还可以的自定义View效果实现,之前分享过一个水平的进度条,如果你有兴趣的话可以看看: Andr ...
- 时间轨迹图控件,自定义View
主要核心代码 package com.example.netprobe.view; import android.content.Context; import android.content.res ...
- android自定义曲线控件,Android自定义view进阶-- 神奇的贝塞尔曲线
上一篇介绍了自定义view需要知道的基本函数.新开一篇献给借给我vpn的深圳_奋斗小哥. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/ ...
- Android开源绘画板(普通绘画模式和可缩放模式)——秒学自定义View和触摸事件原理...
ScaleSketchPadDemo 博客园原文链接 www.cnblogs.com/jincheng-ya- 此项目包含两个模块 app1 为普通绘画板 app2 为可所发的绘画板 方便各位Andr ...
- Xamarin iOS教程之页面控件
Xamarin iOS教程之页面控件 Xamarin iOS 页面控件 在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示.它是由小白点和滚动视图组成,可以用来控制翻 ...
- WPF Calendar 日历控件 样式自定义
原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...
- 上滑ScrollView,实现控件顶部悬浮
上滑ScrollView,实现控件顶部悬浮 因为看到网上的比较复杂,所以自己写了这篇,希望能够足够简单. 先看效果图,是不是你需要的: 不论怎么滑动屏幕内容,当蓝色部分到达顶部时,便会一直会显示在顶部 ...
- Android歌词显示控件TextView自定义
1. 音乐播放,音乐播放,音乐播放放入服务中,那么App 退入后台音乐也可以播放 2. 歌词显示控件TextView自定义: 使用控件TextView, 为什么不用Listview,歌词不可以 ...
最新文章
- Unity WebGL 窗口自适应
- Qt工作笔记-profile中INSTALLS的使用
- eclips git中的add to Index无效解决
- 字符串匹配のKMP【@Abandon】
- leetcode 杨辉三角 III
- hdu 4864 task 贪心
- [itint5]交替字符串
- android实现按键找图功能,从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》更新20140603 _ 教程中心 - 按键精灵论坛...
- SDN开源框架:蝇量级选手Dragonflow究竟解决了什么问题
- linux的一页是多大
- 微信添加地址时选择地区功能是怎么实现的
- 差分隐私——高斯机制(The Gaussian Mechanism)
- Windows 文件夹修改为exe的原理和解决办法
- ros语音识别:pocketsphinx_continuous工作正常而gst-pocketsphinx不能识别相同语音的问题。
- iOS使用 Metrickit 收集崩溃日志
- Unity 3D之实现鱼竿模拟
- 关于地震预测的一个胡思乱想
- linux用户名设置,怎样更改linux的用户名
- Android 在主屏上生成快捷方式
- HTML页面 加载播放RTMP协议流和HLS协议流直播视频
热门文章
- 人工智能:技术本无罪,善恶在人心
- 谷歌对Deepfake亮剑:打造鉴假新工具,帮助媒体识别AI造假
- SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 -
- SAP MM A工厂下的PR可以转成B工厂下的PO?
- OpenCV对象检测实例
- 深度学习---TensorFlow学习笔记:搭建CNN模型
- 终于,LoRaWAN成全球物联网标准!LoRa将拿下LPWAN领域50%市场?
- 清华微电子副所长尹首一:中国AI芯片的技术路线最全面
- 智慧城市建设必须认真对待的几个问题(一):IPV6作为地址的问题
- 中科院5nm激光光刻弯道超车?95后本科生DIY纳米级光刻机?背后的真实情况