hitTest的作用與用法

  • hitTest的作用:
當(dāng)在一個(gè)view上添加一個(gè)屏蔽罩刽射,但又不影響對(duì)下面view的操作织咧,也就是可以透過(guò)屏蔽罩對(duì)
下面的view進(jìn)行操作,這個(gè)函數(shù)就很好用了懦底。
  • hitTest的用法:
    將下面的函數(shù)添加到UIView的子類中唇牧,也就是屏蔽罩類中即可。
-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{
    UIView *hitView = [super hitTest:point withEvent:event];
    if (hitView == self)
    {
        return nil;
    }
    else 
    {
        return hitView;
    }
}
  • UiView touch事件傳遞
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
}
   這個(gè)函數(shù)的用處是判斷當(dāng)前的點(diǎn)擊或者觸摸事件的點(diǎn)是否在當(dāng)前的view中聚唐。
   它被hitTest:withEvent:調(diào)用丐重,通過(guò)對(duì)每個(gè)子視圖調(diào)用pointInside:withEvent:決定最終哪個(gè)視圖來(lái)響應(yīng)此事件。
如果 PointInside:withEvent:返回YES杆查,然后子視圖的繼承樹就會(huì)被遍歷(遍歷順序中最先響應(yīng)的為:與用戶最接近的
那個(gè)視圖弥臼。 it starts from the top-level subview),即子視圖的子視圖繼續(xù)調(diào)用遞歸這個(gè)函數(shù)根灯,直到找到可以響應(yīng)
的子視圖(這個(gè)子視圖的hitTest:withEvent:會(huì)返回self,而不是nil)掺栅;否則烙肺,視圖的繼承樹就會(huì)被忽略。
   當(dāng)我們需要重寫某個(gè)UIView的繼承類UIViewInherit的時(shí)候氧卧,如果需要重寫hitTest:withEvent:方法桃笙,就會(huì)出現(xiàn)是否
調(diào)用[super hitTest:withEvent:]方法的疑問(wèn)?究竟是否需要都是看具體需求沙绝,這里只是說(shuō)明調(diào)與不調(diào)的效果搏明。
    如果不調(diào)用,那么重寫的方法hitTest:withEvent:只會(huì)調(diào)用重寫后的代碼闪檬,根據(jù)所重寫的代碼返回self或nil星著,如果返
回self那么你的這個(gè)UIViewInherit類會(huì)接受你的按鍵,然后調(diào)用touches系列方法粗悯;否則返回nil那么傳遞給UIViewInherit類的按鍵到此為止虚循,
它不接受它的父view給它的按鍵,即不會(huì)調(diào)用touches系列方法。這時(shí)横缔,PointInside:withEvent:幾乎沒(méi)有作用铺遂。
    如果調(diào)用,那么[super hitTest:withEvent:]方法首先是根據(jù)PointInside:withEvent:的返回值決定是否遞歸調(diào)用所
有子View的hitTest:withEvent:方法茎刚。對(duì)于子View的hitTest:withEvent:方法調(diào)用也是一樣的過(guò)程襟锐,這樣一直遞
歸下去,直到最先找到的某個(gè)遞歸層次上的子View的hitTest:withEvent:方法返回非nil膛锭,這時(shí)候粮坞,調(diào)用即結(jié)束,
最終會(huì)調(diào)用這個(gè)子View的touches系列方法泉沾。
 
     如果我們不想讓某個(gè)視圖響應(yīng)事件捞蚂,只需要重載 PointInside:withEvent:方法,讓此方法返回NO就行了跷究。不
過(guò)從這里姓迅,還是不能了解到hitTest:WithEvent的方法的用途。
The implementation of hitTest:withEvent: in UIResponder does the following:

It calls pointInside:withEvent: of self
If the return is NO, hitTest:withEvent: returns nil. the end of the story.
If the return is YES, it sends hitTest:withEvent: messages to its subviews. it starts from the top-level subview, and continues to other views until a subview returns a non-nil object, or all subviews receive the message.
If a subview returns a non-nil object in the first time, the first hitTest:withEvent: returns that object. the end of the story.
If no subview returns a non-nil object, the first hitTest:withEvent: returns self
This process repeats recursively, so normally the leaf view of the view hierarchy is returned eventually.

However, you might override hitTest:withEvent to do something differently. In many cases, overriding pointInside:withEvent: is simpler and still provides enough options to tweak event handling in your application.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俊马,一起剝皮案震驚了整個(gè)濱河市丁存,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柴我,老刑警劉巖解寝,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異艘儒,居然都是意外死亡聋伦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門界睁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)觉增,“玉大人,你說(shuō)我怎么就攤上這事翻斟∮饨福” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵访惜,是天一觀的道長(zhǎng)嘹履。 經(jīng)常有香客問(wèn)我,道長(zhǎng)债热,這世上最難降的妖魔是什么砾嫉? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮窒篱,結(jié)果婚禮上焰枢,老公的妹妹穿的比我還像新娘蚓峦。我一直安慰自己,他們只是感情好济锄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布暑椰。 她就那樣靜靜地躺著,像睡著了一般荐绝。 火紅的嫁衣襯著肌膚如雪一汽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天低滩,我揣著相機(jī)與錄音召夹,去河邊找鬼。 笑死恕沫,一個(gè)胖子當(dāng)著我的面吹牛监憎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播婶溯,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鲸阔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了迄委?” 一聲冷哼從身側(cè)響起褐筛,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叙身,沒(méi)想到半個(gè)月后渔扎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡信轿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年晃痴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片财忽。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倘核,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出定罢,到底是詐尸還是另有隱情,我是刑警寧澤旁瘫,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布祖凫,位于F島的核電站,受9級(jí)特大地震影響酬凳,放射性物質(zhì)發(fā)生泄漏惠况。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一宁仔、第九天 我趴在偏房一處隱蔽的房頂上張望稠屠。 院中可真熱鬧,春花似錦、人聲如沸权埠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)攘蔽。三九已至龙屉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間满俗,已是汗流浹背转捕。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唆垃,地道東北人五芝。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辕万,于是被迫代替她去往敵國(guó)和親枢步。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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