你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS學習筆記——觸摸事件

iOS學習筆記——觸摸事件

編輯:IOS開發綜合

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




  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved