IOS (補充)觸摸事件處理

來源:互聯網
上載者:User

標籤: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 (補充)觸摸事件處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.