標籤:style io color ar os sp 資料 div on
[1]事件的基本概念
UIEvent:事件,是由硬體捕捉的一個表示使用者操作裝置的對象。
分三類:觸摸事件、晃動事件、遠端控制事件
觸摸事件:使用者通過觸摸裝置螢幕操作對象、輸入資料。支援多點觸摸,包含1個到多個觸摸點
UIView支援觸摸事件(因為繼承於UIResponder),而且支援多點觸摸。
需要定義UIView子類,實現觸摸相關的方法。
touches..began、
touches..moved、
touches...ended、
touches..canceled
[2]手勢:有規律的觸摸。
UITouch代表觸摸在螢幕上的一根手指。可以擷取觸摸時間和觸摸位置。
如何擷取touch對象。touches集合中包含了視圖上的所有?勢
什麼是響應者鏈
響應者鏈就是多個響應者對象組成的鏈
事件的基本概念
UIEvent:事件,是由硬體捕捉的一個表示使用者操作裝置的對象。
分三類:觸摸事件、晃動事件、遠端控制事件
觸摸事件:使用者通過觸摸裝置螢幕操作對象、輸入資料。支援多點觸摸,包含1個到多個觸摸點
UIView支援觸摸事件(因為繼承於UIResponder),而且支援多點觸摸。
需要定義UIView子類,實現觸摸相關的方法。
touches..began、
touches..moved、
touches...ended、
touches..canceled
手勢:有規律的觸摸。
UITouch代表觸摸在螢幕上的一根手指。可以擷取觸摸時間和觸摸位置。
如何擷取touch對象。touches集合中包含了視圖上的所有?勢
[3]什麼是響應者鏈
響應者鏈就是多個響應者對象組成的鏈
UIResponder。響應者類。
iOS中所有能響應事件(觸摸、晃動、遠程事件)的對象都是響應者。
系統定義了一個抽象的父類UIResponder來表示響應者。其子類都是響應者
硬體檢測到觸摸操作,會將資訊交給UIApplication,開始檢測。
UIApplication -> window -> viewController -> view ->檢測所有?子視圖
最終確認觸摸位置,完成響應者鏈的查詢過程
檢測到響應者後,實現touchesBegan:withEvent:等方法,即處理事件。
如果響應者沒有處理事件,事件會向下傳遞。如果沒有響應者處理,則丟棄觸摸事件。
事件處理的順序與觸摸檢測查詢相反。
觸摸的?視圖 -> view -> viewController -> window -> UIApplication
響應者鏈可以被打斷。?法完成檢測查詢過程。
視圖類的屬性 : userInteractionEnabled。關閉後能阻斷查詢過程。
代碼:
#import "TestView.h"#import "RootView.h"#define KRandomColor arc4random()%256/255.0@interface TestView(){ //開始觸摸的點 CGPoint _start;}@end@implementation TestView- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor redColor]; } return self;}//開始觸摸事件的時候,執行touch 裡面的預定的執行事件代碼(開始觸摸的時候,到這看看)//一次觸摸事件發生時,該方法只執行一次-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //觸摸的時候隨機顏色(KRandomColor是在延展裡定義的隨機數) self.backgroundColor = [UIColor colorWithRed:KRandomColor green:KRandomColor blue:KRandomColor alpha:1]; //第一次觸摸時候的座標 _start = [[touches anyObject] locationInView:self]; NSLog(@"點我改變顏色");}//一次觸摸事件尚未結束,會一直調用該方法//沒摸完,就一直摸-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ //移動的點 CGPoint nowPoint = [[touches anyObject] locationInView:self]; //移動的點減去開始觸摸的點 CGFloat x = nowPoint.x - _start.x; CGFloat y = nowPoint.y - _start.y; CGPoint centerPoint = CGPointMake(self.center.x + x, self.center.y + y); self.center = centerPoint; //列印移動時候的座標 NSLog(@"%@",NSStringFromCGPoint(nowPoint));}//一次觸摸時間結束,執行該方法//觸摸完成-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"結束了");}//觸摸時間被別的打斷,//有人打擾-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ }@end
IOS (補充)觸摸事件處理