iOS-hitTest方法的底層實現(xiàn)(超出父View響應(yīng)事件将塑、擴大view響應(yīng)事件脉顿、轉(zhuǎn)移事件響應(yīng)順序)

1.原理底層偽代碼

?2:hitTest 方法的練習(xí)1:

業(yè)務(wù)邏輯:

底部一個按鈕, 按鈕的上面有一個View,遮擋在按鈕的上面.

點擊View時, View接收事件,當(dāng)發(fā)現(xiàn)點擊的點在按鈕的位置時, 讓底部的按鈕處理事件.


實現(xiàn)思路:

實現(xiàn)View的touchBegain方法,先堅聽UIView的點擊.

并去實現(xiàn)UIView的HitTest方法, 在hitTest方法當(dāng)中通過把當(dāng)前點轉(zhuǎn)換成按鈕所在的坐標(biāo)系

?CGPoint btnP = [self convertPoint:point toView:self.btn];

?轉(zhuǎn)換過后查看當(dāng)前點在不在按鈕上,如果在按鈕上,就直接返回按鈕.

?如果有在按鈕上,保持系統(tǒng)默認(rèn)做法.


? ? 實現(xiàn)代碼:

?-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{

? ? 判斷當(dāng)前點在不在按鈕上.

? ? 把當(dāng)前點轉(zhuǎn)換成按鈕所在的坐標(biāo)系

? ? CGPoint btnP = [self convertPoint:point toView:self.btn];

? ? if ([self.btn pointInside:btnP withEvent:event]) {

? ? ? ? return self.btn;

? ? }else{

? ? ? return [super hitTest:point withEvent:event];

? ? }

}



注意:在storyBoard中定義了view和按鈕,view自定義可以拖線到自定義的view中点寥,前提是得進行類的關(guān)聯(lián)艾疟,但是button不能拖入,因為button不屬于view的子控件敢辩,解決:可以在view中屬性定義IBOutlet蔽莱,在拖線到storyBoard中的按鈕,這樣就在view中拿到了不屬于view的button

2:hitTest練習(xí)2

業(yè)務(wù)邏輯:

按鈕可以隨著?手指拖動?而拖動.拖動過程當(dāng)中,按鈕當(dāng)中的?子控件也跟著拖動. 讓超過按鈕的?子控件也能夠響應(yīng)事件,?一般情況下,當(dāng)?一個控件超過他的?父控件的時候,是不能 夠接收事件的.

現(xiàn)在要做的事情就讓超過?父控件的按鈕也能夠響應(yīng)事件.




一般情況下,當(dāng)?一個控件超過他的?父控件的時候,是不能 夠接收事件的.原因是:

1:當(dāng)產(chǎn)生觸摸事件后戚长,系統(tǒng)會將觸摸事件發(fā)送到由UIApplication管理的事件隊列中盗冷,UIApplication會將隊列中最前端的事件取出來交給keywindow去處理,主窗口keywindow會1:查看自身能不能接受觸摸事件?

2:觸摸點是不是在自身上?

?3:若是前兩個條件都滿足則其會遍歷自身的子控件同廉,且是從后到前遍歷仪糖,也就是從子控件數(shù)組的最后一個控件開始遍歷柑司,再執(zhí)行前兩個步驟,若是不在乓诽,則遍歷下一個子控件帜羊,若是一直沒找到,則自己就是最合適處理事件的view鸠天,若在,則繼續(xù)重復(fù)前兩個步驟帐姻,直到找到最合適的view稠集。

當(dāng)點擊按鈕的時候window將事件傳遞到白色view,白色view從后往前遍歷子控件饥瓷,先遍歷藍(lán)色的button剥纷,再遍歷點擊對話框,找到適合處理事件的view呢铆。當(dāng)子控件超出父控件的范圍后晦鞋,點擊子控件時不會響應(yīng)事件,原因是:當(dāng)遍歷到父控件點擊對話框時棺克,觸摸點不再其身上悠垛,則其就不會響應(yīng)事件

實現(xiàn)思路:

第一步,先辦到讓按鈕能夠跟隨著?手指移動?而移動. 實現(xiàn)按鈕的touchesMoved?方法,在touchesMoved?方法當(dāng)中,獲得當(dāng)前?手指所在的點.以前上一 個點.一個手指對應(yīng)一個UITouch對象,一個手指取出UITouch娜谊,anyobject确买,若是多根手指則會touch.allobjects獲取所有的UITouch對象,分別計算X軸的偏移量以及Y軸的偏移量. 然后修改當(dāng)前按鈕的transform讓按鈕辦到能夠跟隨著?手指移動?而移動(累加形變).

第二步,

1: 實現(xiàn)按鈕的hitTest?法. 在該方法當(dāng)中去判斷當(dāng)前的點在不在按鈕的?控件上. 如果在按鈕的?控件上.就返回按鈕的子控件,如果不在的話, 就保持系統(tǒng)的默認(rèn)做法.一般在父類中重寫hitTest方法纱皆,修改返回最合適的view

?2:self.chatBtn.btn定義為弱引用湾趾,?self.chatBtn.btn = btn賦值指針地址,弱引用指向該對象派草,[self.chatBtn addSubview:btn];強引用引用著btn使其不被銷毀搀缠,所以可以用weak

?3:事件會由白色view傳遞到其子控件self.chatBtn上,所以在self.chatBtn的類里重寫hitTest方法近迁,修改返回的view

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艺普,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钳踊,更是在濱河造成了極大的恐慌衷敌,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拓瞪,死亡現(xiàn)場離奇詭異缴罗,居然都是意外死亡,警方通過查閱死者的電腦和手機祭埂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門面氓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兵钮,“玉大人,你說我怎么就攤上這事舌界【蚱” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵呻拌,是天一觀的道長葱轩。 經(jīng)常有香客問我,道長藐握,這世上最難降的妖魔是什么靴拱? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮猾普,結(jié)果婚禮上袜炕,老公的妹妹穿的比我還像新娘。我一直安慰自己初家,他們只是感情好偎窘,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溜在,像睡著了一般陌知。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炕泳,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天纵诞,我揣著相機與錄音,去河邊找鬼培遵。 笑死浙芙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的籽腕。 我是一名探鬼主播嗡呼,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼皇耗!你這毒婦竟也來了南窗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤郎楼,失蹤者是張志新(化名)和其女友劉穎万伤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呜袁,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡敌买,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阶界。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虹钮。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡聋庵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芙粱,到底是詐尸還是另有隱情祭玉,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布春畔,位于F島的核電站脱货,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拐迁。R本人自食惡果不足惜蹭劈,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望线召。 院中可真熱鬧,春花似錦多矮、人聲如沸缓淹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讯壶。三九已至,卻和暖如春湾盗,著一層夾襖步出監(jiān)牢的瞬間伏蚊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工格粪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躏吊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓帐萎,卻偏偏與公主長得像比伏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疆导,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容