iOS裝置都是可以多點觸摸的,是指手指放在iOS裝置的螢幕上從螢幕上拖動或抬起。系統當前視圖響應觸摸事件,若無響應則向上層傳遞,構成響應者鏈。觸摸事件的函數有4個。
建立一個視圖,繼承UIView類,在視圖控制器中把視圖載入到視圖控制器上:
- (void)viewDidLoad{ [super viewDidLoad]; //建立一個視圖對象,響應觸摸動作 LinView * pView = [[LinView alloc]initWithFrame:CGRectMake(0, 0, 320, 450)]; //設定視圖的背景顏色,與根視圖區別 pView.backgroundColor = [UIColor blueColor]; //把視圖添加到當前視圖,或視圖控制器 [self.view addSubview:pView]; //釋放建立的對象 [pView release];}
在.h檔案中新增成員變數:
@interface LinView : UIView{ //建立一個成員,存放兩點之間距離變化的資訊 float _lastDistance;}@end
在.h檔案中對各類事件進行相關的實現、處理:
@implementation LinView- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { //??開啟多點觸摸 self.multipleTouchEnabled = YES; self.userInteractionEnabled = YES; } return self;}#pragma mark--------觸摸開始時調用此方法- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //擷取任意一個touch對象 UITouch * pTouch = [touches anyObject]; //擷取對象所在的座標 CGPoint point = [pTouch locationInView:self]; //以字元的形式輸出觸摸點 NSLog(@"觸摸點的座標:%@",NSStringFromCGPoint(point)); //擷取觸摸的次數 NSUInteger tapCount = [pTouch tapCount]; //對觸摸次數判斷 if (tapCount == 1) { //在0.2秒內只觸摸一次視為單擊 [self performSelector:@selector(singleTouch:) withObject:nil afterDelay:0.2]; } else if(tapCount == 2) { //取消單擊響應,若無此方法則雙擊看做是:單擊事件和雙擊事件 [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTouch:) object:nil]; //確定為雙擊事件 [self doubleTouch:nil]; }}//單擊方法- (void)singleTouch:(id)sender{ //對應單擊時發生的事件 NSLog(@"此時是單擊的操作");}//雙擊方法- (void)doubleTouch:(id)sender{ //雙擊時對應發生的事件 NSLog(@"此時是雙擊的操作");}#pragma mark----------觸摸的移動(滑動)- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ //擷取所有的觸摸對象 NSArray * array = [touches allObjects]; //分別取出兩個touch對象 UITouch * pTouch1 = [array objectAtIndex:0]; UITouch * pTouch2 = [array objectAtIndex:1]; //擷取兩個touch對象的座標點 CGPoint point1 = [pTouch1 locationInView:self]; CGPoint point2 = [pTouch2 locationInView:self]; //用封裝的方法計算兩觸摸點之間的距離 double distance = [self distanceOfPoint:point1 withPoint:point2]; //判斷兩點間距離的變化 if ((distance - _lastDistance) > 0) { //兩點距離增大的方法,一般為圖片、文字等的放大,捏合 NSLog(@"兩點距離變大"); } else { //兩點距離減小的方法,一般為圖片、文字等的縮小,放開 NSLog(@"兩點距離變小"); } //把現在的距離賦值給原來的距離,覆蓋之 _lastDistance = distance;}//編寫一個計算兩點之間距離的方法,封裝此方法,方便調用- (double)distanceOfPoint:(CGPoint)point1 withPoint:(CGPoint)point2{ double num1 = pow(point1.x - point2.x, 2); double num2 = pow(point1.y - point2.y, 2); double distance = sqrt(num1 + num2); return distance;}#pragma mark--------手離開螢幕,觸摸事件結束- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ //觸摸結束時發生的事件}#pragma mark--------觸摸事件被打斷,比如電話打進來- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ //一般不寫此方法,可以把程式掛起,放在幕後處理}@end