iOS 基礎(chǔ)--UIEvent 事件類(lèi)型簡(jiǎn)單總結(jié)(觸摸、搖一搖戚绕、遠(yuǎn)程控制)

遙知兄弟登高處纹坐,遍插茱萸少一人!<波波鴿.png>

UIEvent 事件類(lèi)型:

  • 觸摸事件(UIEventTypeTouches )

    • 觸摸事件包括一個(gè)或者多個(gè)觸摸(touches), 每個(gè)觸摸有一個(gè)UITouch對(duì)象表示舞丛。當(dāng)觸摸事件發(fā)生時(shí)耘子,系統(tǒng)會(huì)通過(guò)觸摸處理的邏輯找到合適的responder并把UIEvent對(duì)象傳遞過(guò)去。responder通過(guò)touchesBegan:withEvent:等方法去接收UIEvent對(duì)象球切。
  • 加速計(jì)事件拴还,運(yùn)動(dòng)事件(UIEventTypeMotion )

    • 晃動(dòng)設(shè)備等
  • 遠(yuǎn)程控制事件 (UIEventTypeRemoteControl)

    • 主要是外部輔助設(shè)備或者耳機(jī)的遠(yuǎn)程命令,例如控制音樂(lè)聲音的大小欧聘,或者下一首歌。

  • 觸摸相關(guān)方法:


/**
 下面的四個(gè)方法都有的參數(shù):
 @param NSSet <UITouch *> *) touches 觸摸點(diǎn)集合 (根據(jù)觸摸點(diǎn)的個(gè)數(shù)可以判斷是幾個(gè)觸摸點(diǎn))
 @param event   事件對(duì)象端盆,記錄事件產(chǎn)生的時(shí)刻和類(lèi)型(下面的四個(gè)方法傳入都是同一個(gè)對(duì)象)
 */


// 開(kāi)始觸摸
// 手指開(kāi)始觸摸view,系統(tǒng)會(huì)自動(dòng)調(diào)用方法

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    
}
// 手指在view上移動(dòng)怀骤,系統(tǒng)會(huì)自動(dòng)調(diào)用(隨著手指的移動(dòng),會(huì)持續(xù)調(diào)用該方法)
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
}
// 一手指離開(kāi)view焕妙,系統(tǒng)會(huì)自動(dòng)調(diào)用方法
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
}
// 觸摸結(jié)束前蒋伦,有可能系統(tǒng)的事件打斷了觸摸的響應(yīng),會(huì)調(diào)用的方法焚鹊。(系統(tǒng)方法例如:電話(huà)來(lái)了)
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    
}

UITouch 對(duì)象:

  • 我們用手指觸摸屏幕的時(shí)候痕届,就會(huì)創(chuàng)建一個(gè)與觸摸點(diǎn)關(guān)聯(lián)的 UITouch 對(duì)象,每一個(gè)觸摸點(diǎn)對(duì)應(yīng)一個(gè)UITouch 實(shí)例對(duì)象
  • 這個(gè)對(duì)象保存了與觸摸相關(guān)的信息(位置末患、時(shí)間研叫、階段)
  • 觸摸點(diǎn)改變(手指移動(dòng)),系統(tǒng)對(duì)應(yīng)更新 UITouch 對(duì)象璧针,適時(shí)地記錄觸摸點(diǎn)信息嚷炉。
  • 觸摸結(jié)束時(shí)候,UITouch 對(duì)象被銷(xiāo)毀

UITouch 方法:

  • 返回當(dāng)前觸摸點(diǎn)在 View 上面的位置探橱,傳入 View 為 nil 時(shí)候位置是在 UIWindow申屹。
    - (CGPoint)locationInView:(UIView *)view;
  • 返回前一個(gè)觸摸點(diǎn)在 View 上的位置。
    - (CGPoint)previousLocationInView:(UIView *)view;

  • 加速相關(guān)方法:

// 開(kāi)始搖晃 加速計(jì)事件
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
    
}
// 搖晃結(jié)束
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
    
}
// 搖晃取消
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{
    
}```
##### 小例子:[搖一搖簡(jiǎn)單實(shí)現(xiàn)GitHub](https://github.com/YunZhiJunXiPeng/HotTool.git)
- 準(zhǔn)備:
>- 先在targets -> Build Phases -> Link Binary With Libraries里面添加AudioToolbox.framework隧膏;
   -  >AudioservicesPlaySystemSound函數(shù)來(lái)播放簡(jiǎn)單的聲音
 1.音頻長(zhǎng)度小于30秒
 2.格式只能是PCM或者IMA4
 3.文件必須被存儲(chǔ)為.caf哗讥、.aif、或者.wav格式
 4.簡(jiǎn)單音頻不能從內(nèi)存播放胞枕,而只能是磁盤(pán)文件
     - 注意局限性: 無(wú)法循環(huán)播放聲音杆煞,也無(wú)法控制立體聲效果。可以設(shè)置一個(gè)回調(diào)函數(shù)索绪,在音頻播放結(jié)束時(shí)被調(diào)用湖员,可以對(duì)音頻對(duì)象做清理工作,以及通知你的程序播放結(jié)束瑞驱。 
  - 在模擬器中運(yùn)行時(shí)娘摔,可以通過(guò)「Hardware」-「Shake Gesture」來(lái)測(cè)試「搖一搖」功能

-------
- 導(dǎo)入音頻的頭文件
```code
#import <AudioToolbox/AudioToolbox.h>```
- 定義一個(gè)回調(diào)函數(shù),就是我們搖一搖的音效播放完回調(diào)方法函數(shù)
```code
// 當(dāng)音頻播放完畢會(huì)調(diào)用這個(gè)函數(shù)
// 在完成處理程序標(biāo)簽存儲(chǔ)在 data 唤反。需要到 __bridge 凳寺。
static void SoundFinished(SystemSoundID soundID, void *data){
    /*播放全部結(jié)束,因此釋放所有資源 */
    AudioServicesDisposeSystemSoundID(soundID);
    NSLog(@"%s--->%@",__func__,(__bridge UIViewController *)data);
}
  • 設(shè)置允許搖一搖功能
// 允許搖一搖功能
    [UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;
  // 設(shè)置第一響應(yīng)者
    [self becomeFirstResponder];```

- 開(kāi)始搖晃的時(shí)候我們播放音效
```code 
// 注冊(cè)系統(tǒng)音頻ID
    SystemSoundID soundID;
    
    // 獲取聲音的路徑
    NSString *path = [[NSBundle mainBundle] pathForResource:@"59" ofType:@"m4a"];
    NSURL *soundUrl = [NSURL fileURLWithPath:path];
    
    // 根據(jù)路徑創(chuàng)建
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundUrl, &soundID);
    /*
     
     *參數(shù)說(shuō)明:
     * 1彤侍、剛剛播放完成自定義系統(tǒng)聲音的ID
     * 2肠缨、回調(diào)函數(shù)(playFinished)執(zhí)行的run Loop,NULL表示main run loop
     * 3盏阶、回調(diào)函數(shù)執(zhí)行所在run loop的模式晒奕,NULL表示默認(rèn)的run loop mode
     * 4、需要回調(diào)的函數(shù)
     * 5名斟、傳入的參數(shù)脑慧, 此參數(shù)會(huì)被傳入回調(diào)函數(shù)里
     */
    AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, SoundFinished, (__bridge void *)self);
    
    // 開(kāi)始播放
    AudioServicesPlaySystemSound (soundID);
    return;
}```


```code
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    NSLog(@"取消搖動(dòng)");
    return;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (event.subtype == UIEventSubtypeMotionShake) {
        // 判斷是否是搖動(dòng)結(jié)束
        NSLog(@"搖動(dòng)結(jié)束");
    }  
    return;  
}

遠(yuǎn)程控制相關(guān):

// 根據(jù)傳進(jìn)來(lái)的 event 進(jìn)行判斷,并進(jìn)行相應(yīng)操作即可砰盐。
- (void)remoteControlReceivedWithEvent:(UIEvent *)event{}```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闷袒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岩梳,更是在濱河造成了極大的恐慌囊骤,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冀值,死亡現(xiàn)場(chǎng)離奇詭異也物,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)列疗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)焦除,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人作彤,你說(shuō)我怎么就攤上這事膘魄。” “怎么了竭讳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵创葡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绢慢,道長(zhǎng)灿渴,這世上最難降的妖魔是什么洛波? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮骚露,結(jié)果婚禮上蹬挤,老公的妹妹穿的比我還像新娘。我一直安慰自己棘幸,他們只是感情好焰扳,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著误续,像睡著了一般吨悍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蹋嵌,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天育瓜,我揣著相機(jī)與錄音,去河邊找鬼栽烂。 笑死躏仇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腺办。 我是一名探鬼主播焰手,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菇晃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蚓挤,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤磺送,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灿意,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體估灿,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年缤剧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了馅袁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荒辕,死狀恐怖汗销,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抵窒,我是刑警寧澤弛针,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站李皇,受9級(jí)特大地震影響削茁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一茧跋、第九天 我趴在偏房一處隱蔽的房頂上張望慰丛。 院中可真熱鬧,春花似錦瘾杭、人聲如沸诅病。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)睬隶。三九已至,卻和暖如春页徐,著一層夾襖步出監(jiān)牢的瞬間苏潜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工变勇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恤左,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓搀绣,卻偏偏與公主長(zhǎng)得像飞袋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子链患,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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