事件處理(一)

1> 事件處理簡介

  • 3大事件:(主要)觸摸事件蛉谜、加速計(jì)事件、遠(yuǎn)程控制事件崇堵。

  • 什么是響應(yīng)者對象
    - 在iOS中不是任何對象都能處理事件型诚,只有繼承了UIResponder的對象才能接收并處理事件。我們稱之為“響應(yīng)者對象”
    - UIApplication鸳劳、UIViewController狰贯、UIView都繼承自UIResponder,因此它們都是響應(yīng)者對象赏廓,都能夠接收并處理事件

  • 為什么繼承UIResponder就能處理事件

    • UIResponder內(nèi)部提供了以下方法來處理事件
 1.觸摸事件
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

2.加速計(jì)事件
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;

3.遠(yuǎn)程控制事件
- (void)remoteControlReceivedWithEvent:(UIEvent *)event;
  • 想處理觸摸事件涵紊,應(yīng)該怎么辦
  • UIView是UIResponder的子類,可以覆蓋下列4個(gè)方法處理不同的觸摸事件
1.一根或者多根手指開始觸摸view幔摸,系統(tǒng)會自動調(diào)用view的下面方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

2.一根或者多根手指在view上移動摸柄,系統(tǒng)會自動調(diào)用view的下面方法(隨著手指的移動,會持續(xù)調(diào)用該方法)
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

3.一根或者多根手指離開view既忆,系統(tǒng)會自動調(diào)用view的下面方法
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

4.觸摸結(jié)束前驱负,某個(gè)系統(tǒng)事件(例如電話呼入)會打斷觸摸過程,系統(tǒng)會自動調(diào)用view的下面方法
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
提示:touches中存放的都是UITouch對象
  • 重點(diǎn)UITouch

  • 當(dāng)用戶用一根手指觸摸屏幕時(shí)患雇,會創(chuàng)建一個(gè)與手指相關(guān)聯(lián)的UITouch對象

  • 一根手指對應(yīng)一個(gè)UITouch對象

  • UITouch的作用
    保存著跟手指相關(guān)的信息跃脊,比如觸摸的位置、時(shí)間苛吱、階段

  • 當(dāng)手指移動時(shí)酪术,系統(tǒng)會更新同一個(gè)UITouch對象,使之能夠一直保存該手指在的觸摸位置

  • 當(dāng)手指離開屏幕時(shí)翠储,系統(tǒng)會銷毀相應(yīng)的UITouch對象
    提示:iPhone開發(fā)中拼缝,要避免使用雙擊事件!

1.觸摸事件方法中的UITouch都是同一個(gè)對象彰亥,因?yàn)橐桓种笇?yīng)一個(gè)UITouch.當(dāng)手指移動或者抬起咧七,并不會產(chǎn)生一個(gè)新的UITouch對象給你,而是改變UITouch里面的屬性任斋,

1.默認(rèn)三個(gè)方法里面只能獲取到一個(gè)手指继阻,為什么。
     UIView不支持多點(diǎn)觸控
2.怎么才能有兩個(gè)手指废酷,兩個(gè)手指同時(shí)按瘟檩,并且視圖支持多點(diǎn)觸控

3.UITouch的tapCount有什么用?
    可以判斷用戶當(dāng)前是雙擊還是單擊
4.UITouch的phase有什么用? 
   根據(jù)這個(gè)屬性澈蟆,判斷當(dāng)前需要調(diào)用哪個(gè)處理事件方法墨辛,begin,move,end
  • 一般步驟

1.處理一個(gè)控件的觸摸事件步驟
1.1 自定義View
1.2 重寫touches方法

// NSSet:集合,無序
// 當(dāng)手指觸摸當(dāng)前控件的時(shí)候調(diào)用
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//    
//    NSLog(@"%d",touches.count);
//    // 隨機(jī)取一個(gè)
//    UITouch *touch = [touches anyObject];
//    // 獲取當(dāng)前點(diǎn)
//   CGPoint curP = [touch locationInView:self];
//     NSLog(@"%@",NSStringFromCGPoint(curP));
    NSLog(@"%s",__func__);
}

// 當(dāng)手指在當(dāng)前控件移動的時(shí)候調(diào)用
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    
    // 獲取UITouch
    UITouch *touch = [touches anyObject];
    
    // 獲取當(dāng)前點(diǎn)
    CGPoint curP = [touch locationInView:self];
    
    // 獲取上一次點(diǎn)
    CGPoint preP = [touch previousLocationInView:self];
    
    // 獲取x軸偏移量
    CGFloat offsetX = curP.x - preP.x;
    // 獲取y軸偏移量
    CGFloat offsetY = curP.y - preP.y;
    
    // 修改當(dāng)前控件的位置
    // 修改形變
    // CGAffineTransformMakeTranslation:相對于最開始的位置趴俘,使用Make睹簇,會把之前的所有形變清空奏赘,從零開始形變
    // 相對于上一次的形變
    
    self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);
    
    NSLog(@"%s",__func__);
}

// 當(dāng)手指抬起的時(shí)候調(diào)用
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"%s",__func__);
}

// 當(dāng)觸摸事件被打斷的時(shí)候調(diào)用,比如打電話
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末太惠,一起剝皮案震驚了整個(gè)濱河市磨淌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凿渊,老刑警劉巖梁只,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埃脏,居然都是意外死亡搪锣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門彩掐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淤翔,“玉大人,你說我怎么就攤上這事佩谷。” “怎么了监嗜?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵谐檀,是天一觀的道長。 經(jīng)常有香客問我裁奇,道長桐猬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任刽肠,我火速辦了婚禮溃肪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘音五。我一直安慰自己惫撰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布躺涝。 她就那樣靜靜地躺著厨钻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坚嗜。 梳的紋絲不亂的頭發(fā)上夯膀,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音苍蔬,去河邊找鬼诱建。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碟绑,可吹牛的內(nèi)容都是我干的俺猿。 我是一名探鬼主播茎匠,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辜荠!你這毒婦竟也來了汽抚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤伯病,失蹤者是張志新(化名)和其女友劉穎造烁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體午笛,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惭蟋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了药磺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片告组。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖癌佩,靈堂內(nèi)的尸體忽然破棺而出木缝,到底是詐尸還是另有隱情,我是刑警寧澤围辙,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布我碟,位于F島的核電站,受9級特大地震影響姚建,放射性物質(zhì)發(fā)生泄漏矫俺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一掸冤、第九天 我趴在偏房一處隱蔽的房頂上張望厘托。 院中可真熱鬧,春花似錦稿湿、人聲如沸铅匹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伊群。三九已至,卻和暖如春策精,著一層夾襖步出監(jiān)牢的瞬間舰始,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工咽袜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丸卷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓询刹,卻偏偏與公主長得像谜嫉,于是被迫代替她去往敵國和親萎坷。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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