Touch Panel 事件是在 iOS 上最常被使用的事件之一,在觸發事件時除了可以取得全畫面的座標位置外,也可以針對對應的 View 取得相對應的座標,而上圖就是絕對座標和相對座標的比較。
在開始之前,如果您對 Touch Panel 事件還不熟悉,可以參考 Touch Panel / 觸碰螢幕 / 壓力感應器的基本使用方式一文。
首先是產生一個 UIImageView,接下來我們要取得在點擊這個 View 時的對相應座標。
theImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0.0, 0.0, 256.0, 256.0)];
theImageView.center = CGPointMake(160.0, 340.0);
[theImageView setImage:[UIImage imageNamed:@"icon.png"]];
[self.view addSubview:theImageView];
從上述程式碼可以得知,我們將 UIImageView的大小設定在 256 x 256 大小,因此以該 View 為主所得出的座標必需在這個大小之內,以點擊畫面時所觸發的事件為例,取得座標方式的程式瑪如下。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
float x, y;
//分別針對在一定時間量內所點擊的所有點做運算
for (UITouch *touch in touches) {
//取得相對應的座標
x = [touch locationInView:theImageView].x;
y = [touch locationInView:theImageView].y;
//設定在view的範圍內才show出座標
if ((x >= 0) && (x <= theImageView.frame.size.width) && (y >= 0) && (y <= theImageView.frame.size.height)) {
NSLog(@"X: %f Y: %f", x, y);
}
}
}
在上述程式碼中雖然已取得相對應的座標,但是基於是對所有觸碰事件都做偵測的動作,所以座標還是有可能會出現負數,或是超過 View 大小的可能,當然除了上述這種寫法之外,也可以修改先前的文章的方法取得對應 View 的座標。
UITouch *touchs =[[event allTouches] anyObject];
NSLog(@"X: %f Y: %f", [touchs locationInView:theImageView].x, [touchs locationInView:theImageView].y);
沒有留言:
張貼留言