你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS (補充)觸摸事件處理

IOS (補充)觸摸事件處理

編輯:IOS開發綜合

[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






  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved