IOS觸摸事件監聽和操作

在IOS開發中會遇到各種操作事件,通過程序可以對這些事件做出響應。

首先,當發生事件響應時,必須知道由誰來響應事件。在IOS中,由響應者鏈來對事件進行響應,所有事件響應的類都是UIResponder的子類,響應者鏈是一個由不同對象組成的層次結構,其中的每個對象將依次獲得響應事件消息的機會。當發生事件時,事件首先被髮送給第一響應者,第一響應者往往是事件發生的視圖,也就是用戶觸摸屏幕的地方。事件將沿着響應者鏈一直向下傳遞,直到被接受並做出處理


路線圖如 First Responser——>The Window——>The Application——>App Delegate


正常的響應者鏈流程經常被委託(delegation)打斷,一個對象(通常是視圖)可能將響應工作委託給另一個對象來完成(通常是視圖控制器ViewController),這就是爲什麼做事件響應時在ViewController中必須實現相應協議來實現事件委託。


1.觸摸和事件

——UITouch

UITouch對象是一個手指接觸到屏幕並在屏幕上移動或離開屏幕時創建的。它有幾個屬性和實例方法:

phase:屬性,返回一個階段常量,指出觸摸開始、繼續、結束或被取消,分別對應UITouchPhaseBegan、UITouchPhaseMoved等

tapCount:屬性,輕按屏幕的次數

timeStamp:屬性,觸摸發生的時間

view:屬性,觸摸始於那個視圖

window:屬性,觸摸始於哪個窗口

lacationInView:方法,觸摸在指定視圖中的當前位置

previousLocationView:方法,觸摸在指定視圖中的前一個位置


——UIEvent

UIEvent對象包含一組相關的UITouch對象,由UITouch對象組成UIEvent對象,可以理解成一個完整的觸摸操作是一個UIEvent,而這一系列完整操作中的每個點就是UITouch(按下、移動、離開)。

UIEvent的作用是提供相關觸摸操作的列表,如果要獲取在屏幕上觸摸的手勢,可以使用該對象,這一些列操作都存儲在Foundation框架中的NSSet對象中。


——UIResponder

UIResponser提供四個事件響應的方法,這些方法是事件捕捉的核心。這些方法都接收兩個參數,一個是NSSet(包含指定階段的觸摸)和一個UIEvent。

touchesBegan:withEvent: 在手指觸摸屏幕時報告UITouchPhaseBegan事件

touchesMoved:withEvent: 在手指在屏幕上移動時報告UITouchPhaseMoved事件

touchesEnded:withEvent: 在手指離開屏幕時報告UITouchPhaseEnded事件

touchesCancelled:withEvent: 在因接聽電話或其他因素導致取消觸摸時報告UITouchPhaseCancelled事件


定義一個方法用來響應觸摸事件:

-(void)manageTouches:(NSSet *)touches
{
    for (UITouch *touch in touches) {
        switch (touch.phase) {
            case UITouchPhaseBegan:
                NSLog(@"began...");
                break;
                
            case UITouchPhaseMoved:
                NSLog(@"move...");
                break;
                
            case UITouchPhaseEnded:
                NSLog(@"end...");
                break;
                
            case UITouchPhaseCancelled:
                NSLog(@"cancel...");
                break;
                
            default:
                break;
        }
    }
}

然後在ViewController中響應該方法:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;


-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;


-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;


關於多點觸摸,可以參考Apple IOS SDK開發文檔,多點觸摸在遊戲及其一些新奇的應用中比較多,在常規的應用開發中還是比較少的用到多點觸摸。


轉載自:http://blog.csdn.net/tangren03/article/details/7752861

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章