en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

2.09.2011

暫時忽略畫面觸碰輸入的方法


在很多情況下,我們會想要暫時地忽略畫片觸碰的輸入,來免一些不必要的運算,藉以減少出錯的機率。在撰寫程式時可以使用一個 BOOL 變數來判斷也可以達成此目的,其實還有另一個更簡單的作法,請看以下程式碼。(View-based Template)

首先這是我們觸碰畫面的事件,由此事件可以將手指觸碰畫面的位置反應在螢幕的 Label 上。

//對畫面進行單次點擊時所觸發的函式
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    //宣告一個UITouch的指標來存放事件觸發時所擷取到的狀態
    UITouch *touch = [[event allTouches] anyObject];

    //將XY軸的座標資訊正規化後輸出
    touchX.text = [NSString stringWithFormat:@"%0.0f", [touch locationInView:touch.view].x];
    touchY.text = [NSString stringWithFormat:@"%0.0f", [touch locationInView:touch.view].y];
}

觸碰螢幕的相關設定方法,可以參考先前的 Touch Panel / 觸碰螢幕 / 壓力感應器的基本使用方式一文,這裡就不再介紹。

接著就是觸發 Switch 時的事件,這裡就要設定是否忽略畫面的觸碰輸入,請看以下程式碼。

//由判斷Switch按鈕狀態來決定程式是否處於可觸碰狀態
if ([touchSwitch isOn]) {

    //不可觸碰
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];

    //設定Timer觸發的頻率,每秒30次
    float theInterval = 3.0;

    //正式啟用Timer,selector是設定Timer觸發時所要呼叫的函式
    [NSTimer scheduledTimerWithTimeInterval:theInterval
             target:self
             selector:@selector(resumeTouch)
             userInfo:nil
             repeats:NO];
}
else {

    //可觸碰
    [[UIApplication sharedApplication] endIgnoringInteractionEvents];
}

這裡要特別注意,由於將螢幕觸碰輸入狀態變成忽略之後,畫面上所有元件都將無法觸碰,當然也包含我們設定的 Switch 按鈕,因此我們在將螢幕觸碰輸入狀態變成忽略之後緊接著使用一個計時器 Timer 來當作恢復觸碰的機制,否則畫面將永遠無法進行觸碰,直到關閉應用程式為止,關於計時器的相關使用方式,可在本站搜尋列上查詢「Timer」或「計時器」等關鍵字。






沒有留言:

張貼留言