事件傳遞凳忙、事件響應(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)系如下圖:
從圖中可以看到蒙揣, 如果 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ī)線控)
特別推薦博客:
- http://www.it165.net/pro/html/201409/21350.html (iOS開發(fā)系列觸摸事件、手勢識別淋昭、搖晃事件俐填、耳機(jī)線控)
- http://www.reibang.com/users/93131dfba96a/latest_articl(史上最詳細(xì)的iOS之事件的傳遞和響應(yīng)機(jī)制)
歡迎關(guān)注我的個(gè)人微信公眾號,免費(fèi)送計(jì)算機(jī)各種最新視頻資源翔忽!你想象不到的精彩英融!