響應者鏈

參考:http://www.javashuo.com/article/p-rigmnzyj-hm.html
先執(zhí)行事件鏈,找到合適的view,在執(zhí)行響應鏈。

一悬钳、事件鏈

UIApplication -> window -> view -> view ……..->view
a. 當iOS程序中發(fā)生觸摸事件后唆途,系統(tǒng)會將事件加入到UIApplication管理的一個任務隊列中
b. UIAplication 將處于任務隊列最前端的事件向下分發(fā)捕儒,即UIWindow
c. UIWindow 將事件向下分發(fā)板惑,即UIView
d. UIView首先看自己是否能處理事件(hidden = NO, userInteractionEnabled = YES, alpha >= 0.01),觸摸點是否在自己身上必指。如果能,那么繼續(xù)尋找子視圖
e. 遍歷子控件(從后往前遍歷)恕洲,重復上面的步驟塔橡。
f. 如果沒有找到,那么自己就是事件處理著,如果自己不能處理霜第,那就不做任何事

  • 事件鏈的過程其實就是 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    函數(shù)的執(zhí)行過程谱邪。


    image.png
image.png

二、響應鏈

響應鏈是從最合適的view開始傳遞庶诡,處理事件傳遞給下一個響應者惦银,響應鏈的傳遞是個事件鏈傳遞相反的。如果所有響應者都不處理事件,則事件被丟棄扯俱。通常獲取級響應者是通過nextResponder方法的书蚪。

  • 通常找到對應的view之后然后查找此view是否能處理此事件。
    其實也就是看view能否依次響應下面的幾個方法(并不一定是全部)來構成一個消息迅栅。
  • (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
  • (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
  • (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
  • (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

例如:

1.按鈕上添加手勢情況1

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
    [btn setTitle:@"按鈕" forState:UIControlStateNormal];
    btn.frame = CGRectMake(40, 200, 50, 30);
    btn.backgroundColor = [UIColor greenColor];
    [self.view addSubview:btn];

    [btn addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];

    UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction1)];
    [btn addGestureRecognizer:tap1];


- (void)btnAction {
    NSLog(@"按鈕點擊的");
}

- (void)tapAction1 {
    NSLog(@"手勢1");
}

點擊按鈕后執(zhí)行的結果是:

手勢1
為什么呢殊校?

由于當我們添加了UITapGestureRecognizer手勢之后,當nextResponder為當前的viewcontroller時读存,它走touches的幾個方法時先構成了tap手勢的消息發(fā)送为流,因此打印的結果是手勢1

2.按鈕上添加手勢情況2

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction)];
    [btn addGestureRecognizer: pan];

- (void)panAction {
    NSLog(@"手勢");
}

給按鈕上添加的是平移手勢

當我們點擊按鈕時結果為

按鈕點擊的

當我們平移按鈕時結果為

手勢

3.按鈕上添加手勢情況3

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction)];
    [btn addGestureRecognizer: pan];

    UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction1)];
    [btn addGestureRecognizer:tap1];
    
    
    [btn addTarget:self action:@selector(btnAction1) forControlEvents:UIControlEventTouchDragInside];

- (void)tapAction {
    NSLog(@"手勢");
}
- (void)tapAction1 {
    NSLog(@"手勢1");
}
- (void)btnAction1 {
    NSLog(@"按鈕點擊的1");
}

當按鈕的controlEvents為UIControlEventTouchDragInside時
,同時添加了平移和輕拍手勢

當我們點擊按鈕時執(zhí)行的是 輕拍手勢

手勢1

當我們平移按鈕時让簿,平移的手勢和按鈕的響應都執(zhí)行了

按鈕點擊的1

手勢
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末敬察,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尔当,更是在濱河造成了極大的恐慌莲祸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椭迎,死亡現(xiàn)場離奇詭異锐帜,居然都是意外死亡,警方通過查閱死者的電腦和手機畜号,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門缴阎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人简软,你說我怎么就攤上這事药蜻。” “怎么了替饿?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵语泽,是天一觀的道長。 經常有香客問我视卢,道長踱卵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任据过,我火速辦了婚禮惋砂,結果婚禮上,老公的妹妹穿的比我還像新娘绳锅。我一直安慰自己西饵,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布鳞芙。 她就那樣靜靜地躺著眷柔,像睡著了一般期虾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驯嘱,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天镶苞,我揣著相機與錄音,去河邊找鬼鞠评。 笑死茂蚓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的剃幌。 我是一名探鬼主播聋涨,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼负乡!你這毒婦竟也來了牍白?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤敬鬓,失蹤者是張志新(化名)和其女友劉穎淹朋,沒想到半個月后笙各,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钉答,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年杈抢,在試婚紗的時候發(fā)現(xiàn)自己被綠了数尿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惶楼,死狀恐怖右蹦,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情歼捐,我是刑警寧澤何陆,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站豹储,受9級特大地震影響贷盲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜剥扣,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一巩剖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钠怯,春花似錦佳魔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宁脊。三九已至,卻和暖如春镊尺,著一層夾襖步出監(jiān)牢的瞬間朦佩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工庐氮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留语稠,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓弄砍,卻偏偏與公主長得像仙畦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子音婶,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容