手勢(shì)代理 shouldBeRequiredToFailByGestureRecognizer 和 shouldRequireFailureOfGestureRecognizer 的區(qū)別

shouldBeRequiredToFailByGestureRecognizershouldRequireFailureOfGestureRecognizer 是UIKit中的兩個(gè)手勢(shì)識(shí)別器(GestureRecognizer)代理方法洪碳,它們用于處理多個(gè)手勢(shì)識(shí)別器之間的交互和優(yōu)先級(jí)型宙。這兩個(gè)方法幫助決定當(dāng)多個(gè)手勢(shì)可能同時(shí)被識(shí)別時(shí)雀久,哪一個(gè)手勢(shì)應(yīng)該生效或失敗。但它們的角度和用途有所不同:

  1. shouldBeRequiredToFailByGestureRecognizer:
    這個(gè)方法被調(diào)用在另一個(gè)手勢(shì)識(shí)別器(作為參數(shù)傳遞的那個(gè))上喂柒,詢問(wèn)當(dāng)前手勢(shì)識(shí)別器是否應(yīng)該在另一個(gè)手勢(shì)識(shí)別器成功之前失敗。換句話說(shuō),這個(gè)方法是用來(lái)確定當(dāng)前手勢(shì)是否要有更低的優(yōu)先級(jí)痹换,需要等待其他特定的手勢(shì)識(shí)別器失敗后才能嘗試識(shí)別泻帮。此方法在UIGestureRecognizerDelegate協(xié)議中定義精置,其原型如下:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool

如果返回true,則表示當(dāng)前手勢(shì)識(shí)別器應(yīng)該在otherGestureRecognizer失敗后才嘗試識(shí)別锣杂;如果返回false脂倦,則不改變它們的默認(rèn)優(yōu)先級(jí)關(guān)系。

  1. shouldRequireFailureOfGestureRecognizer:
    相比之下元莫,這個(gè)方法是在設(shè)置一個(gè)手勢(shì)識(shí)別器時(shí)使用赖阻,用來(lái)指定它需要等待另一個(gè)特定手勢(shì)識(shí)別器失敗后才能開(kāi)始嘗試識(shí)別。這是在手勢(shì)識(shí)別器實(shí)例化并配置時(shí)設(shè)置的踱蠢,而不是通過(guò)代理方法火欧。也就是說(shuō),當(dāng)你初始化一個(gè)手勢(shì)識(shí)別器并希望它在另一個(gè)手勢(shì)失敗后才激活時(shí)茎截,你將使用這個(gè)方法來(lái)建立這種依賴關(guān)系苇侵。這不是一個(gè)代理方法,而是一個(gè)直接在手勢(shì)識(shí)別器上配置的屬性或方法(盡管具體實(shí)現(xiàn)細(xì)節(jié)可能因不同的子類而異)企锌。

用于控制手勢(shì)識(shí)別器之間相互作用的行為衅檀。它允許你定義一個(gè)手勢(shì)識(shí)別器只有在另一個(gè)手勢(shì)識(shí)別器未能識(shí)別到手勢(shì)時(shí)才能開(kāi)始嘗試識(shí)別。這在解決手勢(shì)沖突和定義交互優(yōu)先級(jí)時(shí)非常有用霎俩。

以下是使用 shouldRequireFailureOfGestureRecognizer 方法的一個(gè)基本示例場(chǎng)景和代碼示例哀军。假設(shè)你有一個(gè)滑動(dòng)手勢(shì)UISwipeGestureRecognizer和一個(gè)捏合縮放手勢(shì)UIPinchGestureRecognizer,你想要確保當(dāng)用戶嘗試捏合縮放時(shí)打却,滑動(dòng)手勢(shì)不會(huì)干擾:

  • 首先杉适,你需要設(shè)置你的視圖控制器或其他合適的對(duì)象作為這兩個(gè)手勢(shì)識(shí)別器的代理,并且確保遵循 UIGestureRecognizerDelegate 協(xié)議:
class YourViewController: UIViewController, UIGestureRecognizerDelegate {
    
}
  • 接著柳击,初始化你的手勢(shì)識(shí)別器猿推,并設(shè)置代理:
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
swipeGesture.delegate = self
view.addGestureRecognizer(swipeGesture)

let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch))
pinchGesture.delegate = self
view.addGestureRecognizer(pinchGesture)
  • 然后,實(shí)現(xiàn) shouldRequireFailureOfGestureRecognizer 方法以定義手勢(shì)的依賴關(guān)系。在這個(gè)例子中蹬叭,我們讓滑動(dòng)手勢(shì)swipeGesture只有在捏合手勢(shì)pinchGesture失敗時(shí)才嘗試識(shí)別:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer === swipeGesture && otherGestureRecognizer === pinchGesture {
        return true
    }
    return false
}

在這個(gè)方法中藕咏,我們檢查傳入的手勢(shì)識(shí)別器是否是我們希望其依賴于另一個(gè)手勢(shì)失敗的手勢(shì),如果是秽五,則返回 true孽查,表明這個(gè)手勢(shì)識(shí)別器應(yīng)該等待另一個(gè)手勢(shì)失敗后再嘗試識(shí)別。

總結(jié)來(lái)說(shuō)坦喘,shouldBeRequiredToFailByGestureRecognizer 是一個(gè)代理回調(diào)盲再,動(dòng)態(tài)地決定手勢(shì)識(shí)別器間的優(yōu)先級(jí),而 shouldRequireFailureOfGestureRecognizer 是一種配置方式瓣铣,靜態(tài)地設(shè)定一個(gè)手勢(shì)識(shí)別器需要在其指定的手勢(shì)識(shí)別器失敗后才能開(kāi)始嘗試識(shí)別答朋。兩者都是為了管理復(fù)雜觸摸交互中手勢(shì)識(shí)別的順序和優(yōu)先級(jí),但應(yīng)用場(chǎng)合和使用方式有所不同棠笑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梦碗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蓖救,更是在濱河造成了極大的恐慌叉弦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藻糖,死亡現(xiàn)場(chǎng)離奇詭異淹冰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)巨柒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門樱拴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人洋满,你說(shuō)我怎么就攤上這事晶乔。” “怎么了牺勾?”我有些...
    開(kāi)封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵正罢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我驻民,道長(zhǎng)翻具,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任回还,我火速辦了婚禮裆泳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柠硕。我一直安慰自己工禾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著闻葵,像睡著了一般民泵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上槽畔,一...
    開(kāi)封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天栈妆,我揣著相機(jī)與錄音,去河邊找鬼竟痰。 笑死签钩,一個(gè)胖子當(dāng)著我的面吹牛掏呼,可吹牛的內(nèi)容都是我干的坏快。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼憎夷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼莽鸿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拾给,我...
    開(kāi)封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤祥得,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蒋得,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體级及,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年额衙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饮焦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窍侧,死狀恐怖县踢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伟件,我是刑警寧澤硼啤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站斧账,受9級(jí)特大地震影響谴返,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咧织,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一亏镰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拯爽,春花似錦索抓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耸黑。三九已至,卻和暖如春篮幢,著一層夾襖步出監(jiān)牢的瞬間大刊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工三椿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缺菌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓搜锰,卻偏偏與公主長(zhǎng)得像伴郁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛋叼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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