Event Handling Guide for iOS(一)

前言

我想做一件事驰徊,把Event Handling Guide for iOS官方文檔翻譯成中文庶诡。起初是因?yàn)槲蚁胍宄OS中的響應(yīng)者鏈惦银,網(wǎng)上各種文章與我的理解和Demo實(shí)踐有所差異,于是我想去看看最權(quán)威的解釋末誓。 然而當(dāng)我看到70多頁(yè)的英文文檔時(shí)扯俱,不知從何處入手,于是我決定翻譯成自己喜歡的風(fēng)格喇澡,以后也可以看看迅栅。

有難度的事情,做起來(lái)才夠味兒晴玖。

對(duì)于翻譯的出入和錯(cuò)誤读存,希望大家包容和指正为流。下面就開(kāi)始啦。

PDF文檔

關(guān)于iOS事件

用戶(hù)會(huì)以多種方式來(lái)操作iOS設(shè)備让簿,例如觸摸屏幕敬察、搖晃設(shè)備等。iOS系統(tǒng)將用戶(hù)如何尔当、何時(shí)操作設(shè)備的信息進(jìn)行解釋并發(fā)送到APP中莲祸。對(duì)于這些信息更加自然直觀的處理方式,會(huì)帶來(lái)更優(yōu)良的用戶(hù)體驗(yàn)椭迎。

Snip20170907_1.png

總覽

用戶(hù)的操作會(huì)被封裝為Event對(duì)象發(fā)送給APP锐帜。在iOS系統(tǒng)中,Event有許多種形式畜号,譬如多點(diǎn)觸控事件缴阎、運(yùn)動(dòng)事件、多媒體控制事件弄兜。多媒體控制事件被通俗的理解為遠(yuǎn)程控制药蜻,因?yàn)樗苡赏饨拥脑O(shè)備所引發(fā)瓷式。

UIKit讓APP手勢(shì)識(shí)別變得簡(jiǎn)單

iOS應(yīng)用程序能識(shí)別復(fù)雜手勢(shì)并以直觀的方式呈現(xiàn)給用戶(hù)替饿,例如內(nèi)容的縮放、拖拽手勢(shì)贸典,以及內(nèi)容的滾動(dòng)视卢、輕掃手勢(shì)。實(shí)際上廊驼,許多手勢(shì)以類(lèi)似的方式建立于UIKit据过。例如,UIControl的子類(lèi)UIButton妒挎、UISlider绳锅,分別響應(yīng)特定的手勢(shì)——點(diǎn)擊和拖拽,當(dāng)你配置這些控件時(shí)酝掩,它們都會(huì)在觸摸觸發(fā)時(shí)向目標(biāo)對(duì)象發(fā)送動(dòng)作信息鳞芙。你亦可以將目標(biāo)-動(dòng)作機(jī)制運(yùn)用于視圖上的手勢(shì)識(shí)別器。當(dāng)你為視圖添加手勢(shì)識(shí)別器后期虾,整個(gè)視圖如同control一般原朝,能響應(yīng)你所指定的手勢(shì)。

手勢(shì)識(shí)別器為復(fù)雜的事件處理邏輯提供了高層次的抽象镶苞。手勢(shì)識(shí)別器是APP中實(shí)現(xiàn)事件處理的首選方式喳坠,因?yàn)樗鼜?qiáng)大、復(fù)用性強(qiáng)茂蚓、適應(yīng)性強(qiáng)壕鹉。你能使用任何一種內(nèi)置的手勢(shì)并自定義它的行為剃幌,你也可以創(chuàng)建你自己的手勢(shì)識(shí)別器來(lái)識(shí)別新的手勢(shì)。

通過(guò)指定的路徑尋找處理Event的對(duì)象

當(dāng)iOS系統(tǒng)識(shí)別到Event晾浴,便將它傳遞給最有可能處理事件的初始化對(duì)象锥忿,例如觸摸發(fā)生的視圖。倘若初始化對(duì)象并不能處理事件怠肋,iOS系統(tǒng)則會(huì)繼續(xù)在更大的范圍內(nèi)傳遞事件以尋找能處理事件的對(duì)象敬鬓。這些對(duì)象的序列被稱(chēng)之為響應(yīng)者鏈,iOS系統(tǒng)除了沿著這條鏈條傳遞事件笙各,也會(huì)傳遞處理事件的義務(wù)钉答。這種設(shè)計(jì)模式令事件處理顯得靈動(dòng)和協(xié)同。

UIEvent對(duì)象可以封裝諸如觸摸杈抢、搖晃数尿、遠(yuǎn)程控制事件等

大多數(shù)事件對(duì)象是UIEvent類(lèi)的實(shí)例。APP通過(guò)UIEvent對(duì)象包含的事件信息來(lái)決定如何響應(yīng)事件惶楼。例如右蹦,當(dāng)手觸摸屏幕并在屏幕上移動(dòng),接下來(lái)iOS系統(tǒng)將發(fā)送事件給APP處理歼捐,每一個(gè)事件都有一個(gè)主類(lèi)型和子類(lèi)型何陆,而主類(lèi)型包括觸摸、搖晃豹储、遠(yuǎn)程控制等贷盲。

當(dāng)用戶(hù)觸摸視圖,APP會(huì)收到多點(diǎn)觸控事件

基于你的APP剥扣,UIKit有足夠多的控件和手勢(shì)識(shí)別器來(lái)為你處理所有的觸摸事件巩剖。即便是自定義視圖,你也可以使用手勢(shì)識(shí)別器钠怯。一般說(shuō)來(lái)佳魔,當(dāng)APP的觸摸響應(yīng)與視圖本身高度的耦合時(shí),你會(huì)自定義事件的處理晦炊,例如通過(guò)觸摸進(jìn)行繪制鞠鲜。在這種情況下,你需要負(fù)責(zé)底層的事件處理刽锤,你會(huì)實(shí)現(xiàn)觸摸相關(guān)聯(lián)的方法镊尺,并在這些方法中分析原生的觸摸事件并做出合適的響應(yīng)。

當(dāng)用戶(hù)移動(dòng)設(shè)備并思,APP會(huì)收到運(yùn)動(dòng)事件

運(yùn)動(dòng)事件會(huì)提供設(shè)備的位置庐氮、方向、移動(dòng)等信息宋彼。通過(guò)對(duì)運(yùn)動(dòng)事件的處理弄砍,你可以為你的APP添加巧妙而又強(qiáng)大的功能仙畦。加速器和陀螺儀數(shù)據(jù)可以讓你監(jiān)測(cè)傾斜、轉(zhuǎn)動(dòng)和搖動(dòng)音婶。

運(yùn)動(dòng)事件來(lái)源于不同的形式慨畸,因此你也可以通過(guò)不同的框架進(jìn)行處理。當(dāng)用戶(hù)搖晃手機(jī)衣式,UIKit發(fā)送UIEvent對(duì)象到APP中寸士。 如果你想要接收高頻率、持續(xù)的加速器和陀螺儀數(shù)據(jù)碴卧,則可以使用Core Motion框架弱卡。

當(dāng)用戶(hù)進(jìn)行多媒體控制,APP會(huì)收到遠(yuǎn)程控制事件

iOS系統(tǒng)控件和外接設(shè)備進(jìn)行的多媒體控制將會(huì)發(fā)送遠(yuǎn)程控制事件到APP住册。用戶(hù)通過(guò)這些事件來(lái)控制音頻和視頻婶博,例如通過(guò)耳機(jī)調(diào)整音量。對(duì)于多媒體遠(yuǎn)程控制事件的處理將使你的APP能夠響應(yīng)諸如此類(lèi)的命令荧飞。

預(yù)備知識(shí)

這篇文檔基于你已熟悉以下知識(shí)點(diǎn):

  • 基本的iOS APP開(kāi)發(fā)概念
  • 不同的用戶(hù)界面開(kāi)發(fā)方式
  • 視圖與視圖控制器的工作凡人、自定義方式

如果你還不熟悉這些概念,請(qǐng)先閱讀Start Developing iOS Apps Today叹阔。并確保閱讀了View Programming Guide for iOSView Controller Programming Guide for iOS;

參見(jiàn)

iOS設(shè)備以同樣的方式提供了觸摸和運(yùn)動(dòng)的數(shù)據(jù)挠轴,而大多數(shù)的iOS設(shè)備都有GPS和指南針相關(guān)的硬件,由此生成APP可能感興趣的底層數(shù)據(jù)条获。Location Awareness Programming Guide討論了如何接收和處理位置數(shù)據(jù)忠荞。

更加高級(jí)的手勢(shì)識(shí)別器技術(shù),例如平滑曲線(xiàn)和低通濾波器帅掘,請(qǐng)參見(jiàn)WWDC 2012: Building Advanced Gesture Recognizers .;

許多使用手勢(shì)識(shí)別器和事件處理的示例代碼可以查閱iOS 參考庫(kù)。以下項(xiàng)目包含了這些示例代碼:

  • Simple Gesture Recognizers是理解手勢(shì)識(shí)別的啟蒙課堂油。這些APP示范了如何去識(shí)別點(diǎn)擊修档、輕掃和旋轉(zhuǎn)手勢(shì)。并能夠讓展示和動(dòng)畫(huà)的圖片對(duì)觸摸事件做出響應(yīng)府框。

  • Touches包含了兩個(gè)項(xiàng)目吱窝,分別示范了如何使用多點(diǎn)觸控和在屏幕內(nèi)拖拽區(qū)域。一個(gè)版本使用手勢(shì)識(shí)別器迫靖,另一個(gè)則使用觸摸事件的處理方法院峡。后一個(gè)版本對(duì)于理解觸摸的階段尤其有用,因?yàn)樗故玖擞|摸發(fā)生時(shí)所產(chǎn)生的不同階段系宜。

  • MoveMe展現(xiàn)了如何讓一個(gè)動(dòng)畫(huà)的視圖響應(yīng)觸摸事件照激,分析這個(gè)簡(jiǎn)單的項(xiàng)目能讓你更進(jìn)一步的理解自定義的事件處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盹牧,一起剝皮案震驚了整個(gè)濱河市俩垃,隨后出現(xiàn)的幾起案子励幼,更是在濱河造成了極大的恐慌,老刑警劉巖口柳,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苹粟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡跃闹,警方通過(guò)查閱死者的電腦和手機(jī)嵌削,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)望艺,“玉大人掷贾,你說(shuō)我怎么就攤上這事∪倜#” “怎么了想帅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)啡莉。 經(jīng)常有香客問(wèn)我港准,道長(zhǎng),這世上最難降的妖魔是什么咧欣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任浅缸,我火速辦了婚禮,結(jié)果婚禮上魄咕,老公的妹妹穿的比我還像新娘衩椒。我一直安慰自己,他們只是感情好哮兰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布毛萌。 她就那樣靜靜地躺著,像睡著了一般喝滞。 火紅的嫁衣襯著肌膚如雪阁将。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天右遭,我揣著相機(jī)與錄音做盅,去河邊找鬼。 笑死窘哈,一個(gè)胖子當(dāng)著我的面吹牛吹榴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滚婉,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼图筹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了满哪?” 一聲冷哼從身側(cè)響起婿斥,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤劝篷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后民宿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體娇妓,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年活鹰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哈恰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡志群,死狀恐怖着绷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锌云,我是刑警寧澤荠医,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站桑涎,受9級(jí)特大地震影響彬向,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攻冷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一娃胆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧等曼,春花似錦里烦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至枷畏,卻和暖如春别厘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拥诡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氮发,地道東北人渴肉。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爽冕,于是被迫代替她去往敵國(guó)和親仇祭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • 手勢(shì)識(shí)別器 手勢(shì)識(shí)別器將底層的事件處理代碼轉(zhuǎn)化為高層次的行為颈畸。它們是你可以添加到視圖中的對(duì)象乌奇,讓你的視圖具備con...
    Randy1993閱讀 438評(píng)論 0 1
  • 好奇觸摸事件是如何從屏幕轉(zhuǎn)移到APP內(nèi)的没讲?困惑于Cell怎么突然不能點(diǎn)擊了?糾結(jié)于如何實(shí)現(xiàn)這個(gè)奇葩響應(yīng)需求礁苗?亦或是...
    Lotheve閱讀 57,303評(píng)論 51 599
  • 在iOS開(kāi)發(fā)中經(jīng)常會(huì)涉及到觸摸事件爬凑。本想自己總結(jié)一下,但是遇到了這篇文章试伙,感覺(jué)總結(jié)的已經(jīng)很到位嘁信,特此轉(zhuǎn)載。作者:L...
    WQ_UESTC閱讀 6,024評(píng)論 4 26
  • 在開(kāi)發(fā)過(guò)程中疏叨,大家或多或少的都會(huì)碰到令人頭疼的手勢(shì)沖突問(wèn)題潘靖,正好前兩天碰到一個(gè)類(lèi)似的bug,于是借著這個(gè)機(jī)會(huì)了解了...
    閆仕偉閱讀 5,353評(píng)論 2 23
  • 張小嫻:愛(ài)情蚤蔓,就是彼此永不止休的思念卦溢,是永遠(yuǎn)放不下的牽掛,是心甘情愿的牽絆秀又。 白樂(lè):愛(ài)情单寂,是心靈之懂;是兩情之悅涮坐,...
    白樂(lè)隨心閱讀 225評(píng)論 0 1