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 才能正常瀏覽本網站,謝謝!

6.08.2012

使用 UIGestureRecognizer 取得點擊畫面時的座標位置

若要取得點擊畫面時的對應座標,除了可以使用 UITouch 來取得與畫面互動時的事件外,還可以利用 UIGestureRecognizer 手勢辨識的方法來達成此目的,兩者最大的不同是,前者,UITouch 會回應每一個觸碰事件,包含點擊畫面、移動與手指放開畫面,使用者必須自行建立一套規則來判斷所要擷取的事件,如果只是針對一個簡單的點擊事件,則會顯得有些瑣碎,而後者,UIGestureRecognizer 則是先建立一套制式的規則,像是滑動、點擊或是拖曳等,等到觸碰事件符合所設定的制式規則時才去做回應。

有關更詳細的 UIGestureRecognizer 使用方法,請參考手勢辨識 UIGestureRecognizer 物件一文,下面程式碼就只針如何對取得點擊畫面的座標位置加以說明(在 ViewController 中實作以下程式碼)。
//宣告一個點擊手勢辨識的物件
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapScreen:)];

//設定行為(單指、點擊兩下)
[tapGestureRecognizer setNumberOfTouchesRequired:1];
[tapGestureRecognizer setNumberOfTapsRequired:2];

//加入欲互動區的 UIView 中
[self.view addGestureRecognizer:tapGestureRecognizer];

- (void)tapScreen:(UITapGestureRecognizer *)tap {
    CGPoint point = [tap locationInView:self.view];
    NSLog(@"點擊兩下畫面座標位置 %f, %f",point.x, point.y);
}

上述程式碼中,我們宣告了一個點擊手勢辨識的物件 tapGestureRecognizer 與辨識成功時需要回應的方法函式 tapScreen:,並且制定它的行為(單指、點擊兩下)後才把它加入到主畫面中,這時,使用者只要在畫面任何地方有「使用單指點擊兩下」的動作,都會觸發所要回應的方法函式,以取得點擊畫面時的所在座標。

同理,我們也可以利用 UIGestureRecognizer 來取得手指在螢幕上滑動時的座標,比起使用 UITouch 來做判斷再取得座標,實在容易許多, 但是如果想要做更細微的辨識,還是得仰賴 UITouch 的方法才行。
//宣告一個滑動手勢辨識的物件
UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeScreen:)];

//設定行為(單指、向右滑動-以裝置擺設的方向為準)
[swipeGestureRecognizer setNumberOfTouchesRequired:1];
[swipeGestureRecognizer setDirection:UISwipeGestureRecognizerDirectionRight];

//加入欲互動區的 UIView 中
[self.view addGestureRecognizer:swipeGestureRecognizer];

- (void)swipeScreen:(UISwipeGestureRecognizer *)swipe {
    CGPoint point = [swipe locationInView:self.view];
    NSLog(@"滑過畫面座標位置 %f, %f",point.x, point.y);
}

手指點擊兩下與滑動時擷取座標的結果




ps:關於 UITouch 的相關文章與應用,你可以在本站的索引式搜索 Index Search 中使用「UITouch」來做查詢,獲得更多相關資訊。





沒有留言:

張貼留言