iOS學習筆記——觸摸事件

來源:互聯網
上載者:User

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




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.