iOS利用運(yùn)行時(shí)機(jī)制(runtime)實(shí)現(xiàn)pop全屏手勢(shì)

運(yùn)行時(shí)(runtime)簡(jiǎn)單來說就是我們通常用swift或oc編寫的代碼在運(yùn)行的時(shí)候都會(huì)通過運(yùn)行時(shí)轉(zhuǎn)換成底層的C(個(gè)人理解而已)腌乡。


今天通過運(yùn)行時(shí)機(jī)制斩启,來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的pop全屏手勢(shì),現(xiàn)在大部分流行APP中都會(huì)添加這個(gè)手勢(shì)芳誓。先給大家講一下余舶,我對(duì)這個(gè)pop手勢(shì)的理解思路:

thought

上面的思路想必大家應(yīng)該好理解(我只是按著我的思路來寫的,大家勿噴)锹淌。


下面我們直接通過代碼來分析:

這里我們根據(jù)上面的思路來獲取到系統(tǒng)pop手勢(shì)的target和action :

1. 獲取系統(tǒng)的pop手勢(shì)

```

guard let systemGes = interactivePopGestureRecognizer else { return }

```

2.獲取手勢(shì)添加在哪個(gè)View上

```

guard let gesView = interactivePopGestureRecognizer?.view else { return }

```

3.利用運(yùn)行時(shí)機(jī)制查看手勢(shì)的所有屬性名稱(class_copyIvarList 是獲取屬性列表)

```

var outCount : UInt32 = 0 // 這里的outCount可以理解為匿值,是來存放屬性的一個(gè)數(shù)組個(gè)數(shù)(有多少個(gè)屬性)

let ivars = class_copyIvarList(UIGestureRecognizer.self, &outCount)!;

for i in 0..<outCount {

let ivar = ivars[Int(i)];

let name = ivar_getName(ivar);

print(String(cString: name!));

}

```

到這里,我們查看下print出來的結(jié)果:

print

2.根據(jù)我們上面所說的赂摆,這里想必大家應(yīng)該知道我們應(yīng)該用到那個(gè)屬性了挟憔,這里應(yīng)該是_targets。我們可以利用這個(gè)Key值來獲取到一個(gè)數(shù)組(targets):

```

let targets = systemGes.value(forKey: "_targets") as? [NSObject];

```

3.這個(gè)數(shù)組里面存放的是對(duì)象库正,我們這里打印一下這個(gè)targets數(shù)組(數(shù)組里面存放在一個(gè)字典):

targets

4.我們可以看到里面是個(gè)字典曲楚,我們先把這個(gè)字典給取出來:

```

guard let targetObjc = targets?.first else { return }

```

targetObjc

我們會(huì)發(fā)現(xiàn)里面有兩個(gè)key值:一個(gè)是action厘唾,另一個(gè)是target褥符,沒錯(cuò)這就是我們想要的。

5.然后通過target這個(gè)key值獲取target

```

guard let target = targetObjc.value(forKey: "target") else { return }

```

target

6.取出action抚垃,(因?yàn)樯厦嫖覀円呀?jīng)知道action的值了喷楣,所以直接拿來用就可以handleNavigationTransition:)

```

let action = Selector(("handleNavigationTransition:"));

```

在這之前,我們已經(jīng)得到了系統(tǒng)pop時(shí)的action和target鹤树,接下來我們就是要修改它們


修改手勢(shì)

創(chuàng)建Pan手勢(shì)(這些都不需要說了铣焊,大家都會(huì),直接上代碼)

```

let panGes = UIPanGestureRecognizer();

gesView.addGestureRecognizer(panGes);

panGes.addTarget(target, action: action);//這里的target和action就是我們上面獲取到的

```

好了罕伯,上面的內(nèi)容就是一個(gè)簡(jiǎn)單運(yùn)用運(yùn)行時(shí)修改系統(tǒng)的pop手勢(shì)了曲伊,有什么講的不對(duì)的地方請(qǐng)大家多多包涵!


插點(diǎn)題外話

我也是邊學(xué)習(xí)邊分享的,大家不要噴坟募,因?yàn)镮T這個(gè)行業(yè)我們大家都懂岛蚤,技術(shù)一直在進(jìn)步,我們得一直學(xué)習(xí)懈糯,所以大家別嫌麻煩涤妒,多學(xué)東西是沒有壞處的,共勉赚哗。

最后預(yù)祝所有的IT程序猿在年終拿個(gè)自己滿意的年終獎(jiǎng)她紫,技術(shù)一天比一天牛,生活一天比一天好屿储!第一次發(fā)帖贿讹,多多包涵!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扩所,一起剝皮案震驚了整個(gè)濱河市围详,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祖屏,老刑警劉巖助赞,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異袁勺,居然都是意外死亡雹食,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門期丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來群叶,“玉大人,你說我怎么就攤上這事钝荡〗至ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵埠通,是天一觀的道長(zhǎng)赎离。 經(jīng)常有香客問我,道長(zhǎng)端辱,這世上最難降的妖魔是什么梁剔? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮舞蔽,結(jié)果婚禮上荣病,老公的妹妹穿的比我還像新娘。我一直安慰自己渗柿,他們只是感情好个盆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般颊亮。 火紅的嫁衣襯著肌膚如雪鸡岗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天编兄,我揣著相機(jī)與錄音轩性,去河邊找鬼。 笑死狠鸳,一個(gè)胖子當(dāng)著我的面吹牛揣苏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播件舵,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卸察,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了铅祸?” 一聲冷哼從身側(cè)響起坑质,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎临梗,沒想到半個(gè)月后涡扼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盟庞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吃沪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片什猖。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡票彪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出不狮,到底是詐尸還是另有隱情降铸,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布摇零,位于F島的核電站推掸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏遂黍。R本人自食惡果不足惜终佛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一俊嗽、第九天 我趴在偏房一處隱蔽的房頂上張望雾家。 院中可真熱鬧,春花似錦绍豁、人聲如沸芯咧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敬飒。三九已至邪铲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間无拗,已是汗流浹背带到。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留英染,地道東北人揽惹。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像四康,于是被迫代替她去往敵國和親搪搏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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