事件傳遞蠢挡、事件響應(yīng)、UIResponder學(xué)習(xí)

事件傳遞凳忙、事件響應(yīng)

學(xué)習(xí)事件傳遞业踏、事件響應(yīng)極力推薦:http://www.reibang.com/p/2e074db792ba (寫的真心很棒,本來還打算自己寫一個(gè)博客呢涧卵,但是發(fā)現(xiàn)自己無論如何也達(dá)不到那種程度勤家,所以僅僅是把鏈接貼出來,一方面是為了關(guān)注我的朋友能去了解一下柳恐,另一方面也是為了給自己學(xué)習(xí)過程留下一個(gè)痕跡)

UIResponder學(xué)習(xí)

轉(zhuǎn)載(http://blog.csdn.net/maojudong/article/details/7798138

簡介

此類繼承自NSObject所屬的框架UIKit.framework定義了一些接口對象伐脖,然后響應(yīng)事件,它是 UIApplication, UIView 和UIWindow等的父類
iOS 中乐设,所有顯示在界面上的對象都是從 UIResponder 直接或間接繼承的讼庇。
最新版本的iOS中有三種類型事件:

  • 觸摸事件(通過觸摸、手勢進(jìn)行觸發(fā)(例如手指點(diǎn)擊近尚、縮放))
  • motion事件(通過加速器進(jìn)行觸發(fā)(例如手機(jī)晃動))
  • 遠(yuǎn)程控制(通過其他遠(yuǎn)程設(shè)備觸發(fā)(例如耳機(jī)控制按鈕))
    下圖是蘋果官方對于這三種事件的形象描述:


    20140902191747111.png
觸摸事件

只要手指觸摸屏幕蠕啄,滑動,從屏幕離開戈锻,系統(tǒng)都會產(chǎn)生UIEvent對象類型的事件---當(dāng)然包括UITouch事件
– touchesBegan:withEvent: 當(dāng)用戶觸摸到屏幕時(shí)調(diào)用方法
– touchesMoved:withEvent: 當(dāng)用戶觸摸到屏幕并移動時(shí)調(diào)用此方法
– touchesEnded:withEvent: 當(dāng)觸摸離開屏幕時(shí)調(diào)用此方法
– touchesCancelled:withEvent: 當(dāng)觸摸被取消時(shí)調(diào)用此方法(例如正在觸摸過程中歼跟,接到了一個(gè)電話,則會調(diào)用該方法)

motion事件

iOS 3.0 + 開始支持motion事件格遭,特別是搖動設(shè)備
– motionBegan:withEvent: 運(yùn)動開始時(shí)執(zhí)行
– motionEnded:withEvent: 運(yùn)動結(jié)束時(shí)執(zhí)行
– motionCancelled:withEvent: 運(yùn)動被取消時(shí)執(zhí)行

遠(yuǎn)程控制(remote control)

iOS 4.0 + 開始支持遠(yuǎn)程事件
– remoteControlReceivedWithEvent:

比較常用的響應(yīng)鏈函數(shù)

2.會用到的有一些“響應(yīng)鏈”函數(shù)
– nextResponder下一個(gè)響應(yīng)者(父控件)
– isFirstResponder是否是第一響應(yīng)者
– canBecomeFirstResponder能夠成為第一響應(yīng)者
– becomeFirstResponder變成第一響應(yīng)者
– canResignFirstResponder可以失去第一響應(yīng)者
– resignFirstResponder失去第一響應(yīng)者

輸入試圖相關(guān)

輸入視圖是指當(dāng)對象為 firstResponder 對象時(shí)哈街,需要借助另外一個(gè)視圖用來處理當(dāng)前對象的信息輸入,如 UITextView 和 UITextField 兩個(gè)對象拒迅,在 UITextField 成為 firstResponder 對象時(shí)骚秦,會顯示一個(gè)系統(tǒng)鍵盤她倘,用來輸入信息。這個(gè)鍵盤視圖就是一個(gè)輸入視圖了作箍。一共有兩個(gè)相關(guān)的輸入視圖帝牡,一個(gè)是 inputView, 另一個(gè)是 inputAccessoryView,這兩個(gè)視圖顯示的關(guān)系如下圖:

b.jpg

從圖中可以看到蒙揣, 如果 inputView 和 inputAccessoryView 兩個(gè)屬性都指定了相應(yīng)的視圖,則 inputAccessoryView 對象顯示在 inputView 對象的上面开瞭。

  • reloadInputViews這個(gè)方法是當(dāng)view是第一響應(yīng)者的時(shí)候懒震,可以更新inputView和inputAccessoryView,官方給的解釋是:You can use this method to refresh the custom input view or input accessory view associated with the current object when it is the first responder. The views are replaced immediately—that is, without animating them into place. If the current object is not the first responder, this method has no effect.
    當(dāng)是第一響應(yīng)者的時(shí)候嗤详,通過這個(gè)方法个扰,可以去替換inputView和inputAccessoryView,如果不是第一響應(yīng)者的時(shí)候葱色,調(diào)用該方法沒有效果递宅。
    以下是兩個(gè)從網(wǎng)上獲取的兩個(gè)小例子:
搖一搖播放音效
  #import “ViewController.h”
  @interface ViewController () {
      BOOL acceptNextShake;
  }

  @end
  @implementation ViewController

  // 封裝一個(gè)播放段音頻的方法

  -(void)playSoundEffect:(NSString )name withCallback:(void ()(SystemSoundID, void )) callback {
  NSString audioFile = [[NSBundle mainBundle] pathForResource:name ofType:nil];
  NSURL *fileUrl = [NSURL fileURLWithPath:audioFile];

  SystemSoundID soundID;
  // 在系統(tǒng)中創(chuàng)建一個(gè)音效對象并獲得其唯一ID
  AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID);
  // 注冊在播放完之后執(zhí)行的回調(diào)函數(shù)
  // 第二個(gè)和第三個(gè)參數(shù)跟循環(huán)播放有關(guān)
  // 第五個(gè)參數(shù)是指向傳給回調(diào)函數(shù)的數(shù)據(jù)的指針
  AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, callback, NULL);
  // 播放音效
  AudioServicesPlaySystemSound(soundID);
  // 播放音效并震動
  // AudioServicesPlayAlertSound(soundID);
  }

  // 搖一搖開始播放金幣掉下的短音頻

  -(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
  if(acceptNextShake) {

   acceptNextShake = NO;
  [self playSoundEffect:@"4679.mp3" withCallback:nil];
  // 阻止播放音效文件5秒鐘
  dispatch_async(dispatch_get_global_queue(0, 0), ^{
       sleep(5);
       acceptNextShake = YES;
      });
    }
  }  

  -(void)viewDidLoad {
        [super viewDidLoad];

        acceptNextShake = YES;
   }
  @end 
耳機(jī)遠(yuǎn)程事件參考鏈接:

http://www.it165.net/pro/html/201409/21350.html (iOS開發(fā)系列觸摸事件、手勢識別苍狰、搖晃事件办龄、耳機(jī)線控)

特別推薦博客:

歡迎關(guān)注我的個(gè)人微信公眾號,免費(fèi)送計(jì)算機(jī)各種最新視頻資源翔忽!你想象不到的精彩英融!


0.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市歇式,隨后出現(xiàn)的幾起案子驶悟,更是在濱河造成了極大的恐慌,老刑警劉巖材失,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痕鳍,死亡現(xiàn)場離奇詭異,居然都是意外死亡豺憔,警方通過查閱死者的電腦和手機(jī)额获,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恭应,“玉大人抄邀,你說我怎么就攤上這事≈玳唬” “怎么了境肾?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵剔难,是天一觀的道長。 經(jīng)常有香客問我奥喻,道長偶宫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任环鲤,我火速辦了婚禮纯趋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冷离。我一直安慰自己吵冒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布西剥。 她就那樣靜靜地躺著痹栖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞭空。 梳的紋絲不亂的頭發(fā)上揪阿,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音咆畏,去河邊找鬼南捂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鳖眼,可吹牛的內(nèi)容都是我干的黑毅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼钦讳,長吁一口氣:“原來是場噩夢啊……” “哼矿瘦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起愿卒,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缚去,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后琼开,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體易结,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年柜候,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搞动。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渣刷,死狀恐怖鹦肿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辅柴,我是刑警寧澤箩溃,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布瞭吃,位于F島的核電站,受9級特大地震影響涣旨,放射性物質(zhì)發(fā)生泄漏歪架。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一霹陡、第九天 我趴在偏房一處隱蔽的房頂上張望和蚪。 院中可真熱鬧,春花似錦烹棉、人聲如沸惠呼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旅薄,卻和暖如春辅髓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背少梁。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工洛口, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凯沪。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓第焰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妨马。 傳聞我的和親對象是個(gè)殘疾皇子挺举,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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