delaysContentTouches和canCancelContentTouches

前言

为什么我会注意到这两个属性呢,因为当初在做一个可编辑的表单时,遇到使用touch方式处理键盘收起但是没效果的情况,具体解决办法请看UITableView键盘隐藏

简述

delaysContentTouches和canCancelContentTouches都是scrollView的一个属性,在讲这两个属性之前,首先要讲下scrollView的一个机制。

从你的手指touch屏幕开始,scrollView开始一个timer,如果:

  1. 150ms内如果你的手指没有任何动作,消息就会传给subView。
  2. 150ms内手指有明显的滑动(一个swipe动作),scrollView就会滚动,消息不会传给subView。
  3. 150ms内手指没有滑动,scrollView将消息传给subView,但是之后手指开始滑动,scrollView传送touchesCancelled消息给subView,然后开始滚动。

delaysContentTouches:默认值为YES。如果设置为NO,则会立即把事件传递给subView。
canCancelContentTouches:默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。

实践

在storyboard拉入一个scrollView,然后在scrollView里面拉一个view,这个view是自定义的view,实现如下方法

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"摸到了");
}
-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"不摸了");
}

storyboard张这样

E4057C7D-ACCC-41BE-8238-8E045735E6A7.png

情形一:delaysContentTouches和canCancelContentTouches都为YES(即默认情况)

QQ20170316-220029.gif

上图显示
第一次,点击中间的view之后,先停顿一会,之后再开始拖拽(下同)。停顿时scrollView把事件传递给view,view响应了touchesBegan事件。之后开始拖拽,这时view收到了touchesCancelled事件,然后开始滚动了。
第二次,点击中间的view之后,直接开始拖拽(下同)。因为中间没有停顿,所以view没有接收到任何事件。

情形二:delaysContentTouches为NO和canCancelContentTouches为YES

QQ20170316-220810.gif

上图显示
第二次,虽然点击后直接开始拖拽,但是因为scrollView把事件传递给subView是没有延迟的,所以view就立马接收到touchesBegan事件,拖动的那一瞬间,view又接收到touchesCancelled事件。
那第一次,就不用说了。

情形三:delaysContentTouches为YES和canCancelContentTouches为NO

QQ20170316-221420.gif

第一次,停顿时scrollView把事件传递给view,view响应了touchesBegan事件,所以控制台打出了“摸到了”。之后开始滚动,但是view不会接收touchesCancelled事件,而是阻止了scrollView的滚动。
第二次,因为中间没有停顿,所以view压根没接收到touch事件,所以也没法阻止scrollView的滚动。

情形四:delaysContentTouches和canCancelContentTouches都为NO

QQ20170316-221904.gif

第二次,虽然点击后直接开始拖拽,但是因为scrollView把事件传递给subView是没有延迟的,所以view就立马接收到touchesBegan事件。之后开始拖曳,但是view不会接收touchesCancelled事件,而是阻止了scrollView的滚动。
第一次,也不用说了。
至此,这两个属性的用处大家应该都清楚了吧。

切记

千万不要在tableView上试delaysContentTouches属性,那会让你试到怀疑人生的。这个属性在tableView上根本没有效果。这点我也没找到原因,还是在我同事的提醒下,我才意识到这点。


如果本文让你有那么点觉得“I get”的感觉,请点个赞呗!写作很辛苦,路过请点赞!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容