ios手势识别

使用手势识别

六种手势识别(继承于UIGestureRecongnizer基类):

UITapGestureRecongnizer--检测view上的单击操作

UIPinchGestureRecongnizer--检测view上两个手指的缩放操作

UIPanGestureRecongnizer--检测view的拖拽操作

UISwipeGestureRecongnizer--检测view的轻划操作

UIRotationGestureRecongnizer--检测view的旋转操作

UILongPressGestureRecongnizer-检测view上的长按操作 

 UITapGestureRecongnizer  检测view上的单击操作

新建Empty Application项目,在xib中添加ImageView控件,Mode为Aspect Fit,选中User Interaction Enabled和Multiple Touch

HomeViewController.h

 #import <UIKit/UIKit.h>

@interface HomeViewController : UIViewController
@property (retain, nonatomic) IBOutlet UIImageView *imageView;
@end

HomeViewController.m 

#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
- (void)viewDidLoad
{
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];
    tapGesture.numberOfTapsRequired = 2;
    [imageView addGestureRecognizer:tapGesture];
    [tapGesture release];
    
    [super viewDidLoad];
}
- (IBAction)tapGestureHandler:(UIGestureRecognizer *)sender{
    if (sender.view.contentMode == UIViewContentModeScaleAspectFit) {
        sender.view.contentMode = UIViewContentModeScaleAspectFill;
    } else {
        sender.view.contentMode = UIViewContentModeScaleAspectFit;
    }
    
}
- (void)dealloc {
    [imageView release];
    [super dealloc];
}
- (void)viewDidUnload {
    [self setImageView:nil];
    [super viewDidUnload];
}
@end

 UIPinchGestureRecongnizer   检测view上两个手指的缩放操作

HomeViewController.m 
#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
CGFloat lastScaleValue = 1;
- (void)viewDidLoad
{
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];
    tapGesture.numberOfTapsRequired = 2;
    [imageView addGestureRecognizer:tapGesture];
    [tapGesture release];
    
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureHandler:)];
    [imageView addGestureRecognizer:pinchGesture];
    [pinchGesture release];
    
    [super viewDidLoad];
}
- (IBAction)tapGestureHandler:(UIGestureRecognizer *)sender{
    if (sender.view.contentMode == UIViewContentModeScaleAspectFit) {
        sender.view.contentMode = UIViewContentModeScaleAspectFill;
    } else {
        sender.view.contentMode = UIViewContentModeScaleAspectFit;
    }
    
}
- (IBAction)pinchGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat scaleValue = [(UIPinchGestureRecognizer *)sender scale];
    

//如果手指做放大操作,scaleValue的值大于等于1;如果手指是缩小操作,scaleValue的值小于1

    if (scaleValue > 1) {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue + (scaleValue-1), lastScaleValue + (scaleValue-1));
    }else {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue * scaleValue, lastScaleValue * scaleValue);
    } 
    

//用户的手指离开了屏幕,将比例值记录在 lastScaleValue 变量中

    if (sender.state == UIGestureRecognizerStateEnded) {
        if (scaleValue > 1) {
            lastScaleValue += (scaleValue - 1);
        }else {
            lastScaleValue += scaleValue;
        }
    }
     
           
}
- (void)dealloc {
    [imageView release];
    [super dealloc];
}
- (void)viewDidUnload {
    [self setImageView:nil];
    [super viewDidUnload];
}
@end


 UIRotationGestureRecongnizer  检测view的旋转操作

 
#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
CGFloat lastScaleValue = 1;
CGFloat rotationValue;
- (void)viewDidLoad
{
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];
    tapGesture.numberOfTapsRequired = 2;
    [imageView addGestureRecognizer:tapGesture];
    [tapGesture release];
    
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureHandler:)];
    [imageView addGestureRecognizer:pinchGesture];
    [pinchGesture release];
    
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureHandler:)];
    [imageView addGestureRecognizer:rotationGesture];
    [rotationGesture release];
    
    [super viewDidLoad];
}
- (IBAction)tapGestureHandler:(UIGestureRecognizer *)sender{
    if (sender.view.contentMode == UIViewContentModeScaleAspectFit) {
        sender.view.contentMode = UIViewContentModeScaleAspectFill;
    } else {
        sender.view.contentMode = UIViewContentModeScaleAspectFit;
    }
    
}
- (IBAction)pinchGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat scaleValue = [(UIPinchGestureRecognizer *)sender scale];
    
    if (scaleValue > 1) {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue + (scaleValue-1), lastScaleValue + (scaleValue-1));
    }else {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue * scaleValue, lastScaleValue * scaleValue);
    } 
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        if (scaleValue > 1) {
            lastScaleValue += (scaleValue - 1);
        }else {
            lastScaleValue += scaleValue;
        }
    }
     
           
}
- (IBAction)rotationGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat rotation = [(UIRotationGestureRecognizer *)sender rotation];
    CGAffineTransform transform = CGAffineTransformMakeRotation(rotation + rotationValue);
    
    sender.view.transform = transform;
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        rotationValue += rotation;
    }
}
- (void)dealloc {
    [imageView release];
    [super dealloc];
}
- (void)viewDidUnload {
    [self setImageView:nil];
    [super viewDidUnload];
}
@end

UIPanGestureRecongnizer  检测view的拖拽操作

 #import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
CGFloat lastScaleValue = 1;
CGFloat rotationValue;
CGPoint positionValue;
- (void)viewDidLoad
{
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];
    tapGesture.numberOfTapsRequired = 2;
    [imageView addGestureRecognizer:tapGesture];
    [tapGesture release];
    
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureHandler:)];
    [imageView addGestureRecognizer:pinchGesture];
    [pinchGesture release];
    
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureHandler:)];
    [imageView addGestureRecognizer:rotationGesture];
    [rotationGesture release];
    
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureHandler:)];
    [imageView addGestureRecognizer:panGesture];
    [panGesture release];
    
    [super viewDidLoad];
}
- (IBAction)tapGestureHandler:(UIGestureRecognizer *)sender{
    if (sender.view.contentMode == UIViewContentModeScaleAspectFit) {
        sender.view.contentMode = UIViewContentModeScaleAspectFill;
    } else {
        sender.view.contentMode = UIViewContentModeScaleAspectFit;
    }
    
}
- (IBAction)pinchGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat scaleValue = [(UIPinchGestureRecognizer *)sender scale];
    
    if (scaleValue > 1) {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue + (scaleValue-1), lastScaleValue + (scaleValue-1));
    }else {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue * scaleValue, lastScaleValue * scaleValue);
    } 
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        if (scaleValue > 1) {
            lastScaleValue += (scaleValue - 1);
        }else {
            lastScaleValue += scaleValue;
        }
    }
     
           
}
- (IBAction)rotationGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat rotation = [(UIRotationGestureRecognizer *)sender rotation];
    CGAffineTransform transform = CGAffineTransformMakeRotation(rotation + rotationValue);
    
    sender.view.transform = transform;
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        rotationValue += rotation;
    }
}
- (IBAction)panGestureHandler:(UIGestureRecognizer *)sender{
    CGPoint position = [(UIPanGestureRecognizer *)sender translationInView:imageView];
    sender.view.transform = CGAffineTransformMakeTranslation(position.x + position.x, 
                                                             position.y + position.y);
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        positionValue.x += position.x;
        positionValue.y += position.y;
    }
}
- (void)dealloc {
    [imageView release];
    [super dealloc];
}
- (void)viewDidUnload {
    [self setImageView:nil];
    [super viewDidUnload];
}
@end

UISwipeGestureRecongnizer  检测view的轻划操作

#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
CGFloat lastScaleValue = 1;
CGFloat rotationValue;
CGPoint positionValue;
NSArray *images;
int imageIndex = 0;
- (void)viewDidLoad
{
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];
    tapGesture.numberOfTapsRequired = 2;
    [imageView addGestureRecognizer:tapGesture];
    [tapGesture release];
    
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureHandler:)];
    [imageView addGestureRecognizer:pinchGesture];
    [pinchGesture release];
    
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureHandler:)];
    [imageView addGestureRecognizer:rotationGesture];
    [rotationGesture release];
    
    /*注释panGesture的拖拽操作,否则划动和拖拽操作会产生混淆
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureHandler:)];
    [imageView addGestureRecognizer:panGesture];
    [panGesture release];
    */
    
    images = [[NSArray alloc] initWithObjects:@"iphone.png", @"mm.jpg", @"avatar.png", nil];
    
    //默认情况下是向右的手势划动
    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureHandler:)];
    [imageView addGestureRecognizer:swipeGesture];
    [swipeGesture release];
    
    //定义向左的手势划动
    UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureHandler:)];
    swipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
    [imageView addGestureRecognizer:swipeLeftGesture];
    [swipeLeftGesture release];
    
    
    [super viewDidLoad];
}
- (IBAction)tapGestureHandler:(UIGestureRecognizer *)sender{
    if (sender.view.contentMode == UIViewContentModeScaleAspectFit) {
        sender.view.contentMode = UIViewContentModeScaleAspectFill;
    } else {
        sender.view.contentMode = UIViewContentModeScaleAspectFit;
    }
    
}
- (IBAction)pinchGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat scaleValue = [(UIPinchGestureRecognizer *)sender scale];
    
    if (scaleValue > 1) {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue + (scaleValue-1), lastScaleValue + (scaleValue-1));
    }else {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue * scaleValue, lastScaleValue * scaleValue);
    } 
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        if (scaleValue > 1) {
            lastScaleValue += (scaleValue - 1);
        }else {
            lastScaleValue += scaleValue;
        }
    }
     
           
}
- (IBAction)rotationGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat rotation = [(UIRotationGestureRecognizer *)sender rotation];
    CGAffineTransform transform = CGAffineTransformMakeRotation(rotation + rotationValue);
    
    sender.view.transform = transform;
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        rotationValue += rotation;
    }
}
- (IBAction)panGestureHandler:(UIGestureRecognizer *)sender{
    CGPoint position = [(UIPanGestureRecognizer *)sender translationInView:imageView];
    sender.view.transform = CGAffineTransformMakeTranslation(position.x + position.x, 
                                                             position.y + position.y);
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        positionValue.x += position.x;
        positionValue.y += position.y;
    }
}
- (IBAction)swipeGestureHandler:(UIGestureRecognizer *)sender{
    UISwipeGestureRecognizerDirection direction =[(UISwipeGestureRecognizer *)sender direction];
    
    switch (direction) {
        case UISwipeGestureRecognizerDirectionUp:
            NSLog(@"向上划动");
            break;
            case UISwipeGestureRecognizerDirectionDown:
            NSLog(@"向下划动");
            break;
            case UISwipeGestureRecognizerDirectionLeft:
            imageIndex++;
            break;
            case UISwipeGestureRecognizerDirectionRight:
            imageIndex--;
            break;
            default:
            break;
    }
    imageIndex = (imageIndex < 0) ? ([images count] - 1):imageIndex % [images count];
    imageView.image = [UIImage imageNamed:[images objectAtIndex:imageIndex]];
}
- (void)dealloc {
    [images release];
    [imageView release];
    [super dealloc];
}
- (void)viewDidUnload {
    [self setImageView:nil];
    [super viewDidUnload];
}
@end

UILongPressGestureRecongnizer  检测view上的长按操作 

 添加UIActionSheetDelegate协议

HomeViewController.h 

#import <UIKit/UIKit.h>
@interface HomeViewController : UIViewController
<UIActionSheetDelegate>{}
@property (retain, nonatomic) IBOutlet UIImageView *imageView;
@end

HomeViewController.m

 #import "HomeViewController.h"

@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
CGFloat lastScaleValue = 1;
CGFloat rotationValue;
CGPoint positionValue;
NSArray *images;
int imageIndex = 0;
- (void)viewDidLoad
{
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureHandler:)];
    tapGesture.numberOfTapsRequired = 2;
    [imageView addGestureRecognizer:tapGesture];
    [tapGesture release];
    
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureHandler:)];
    [imageView addGestureRecognizer:pinchGesture];
    [pinchGesture release];
    
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureHandler:)];
    [imageView addGestureRecognizer:rotationGesture];
    [rotationGesture release];
    
    /*注释panGesture的拖拽操作,否则划动和拖拽操作会产生混淆
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureHandler:)];
    [imageView addGestureRecognizer:panGesture];
    [panGesture release];
    */
    
    images = [[NSArray alloc] initWithObjects:@"iphone.png", @"mm.jpg", @"avatar.png", nil];
    
    //默认情况下是向右的手势划动
    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureHandler:)];
    [imageView addGestureRecognizer:swipeGesture];
    [swipeGesture release];
    
    //定义向左的手势划动
    UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureHandler:)];
    swipeLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
    [imageView addGestureRecognizer:swipeLeftGesture];
    [swipeLeftGesture release];
    
    //开始长按的内容部分
    UILongPressGestureRecognizer *longpressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longpressGestureHandler:)];
    longpressGesture.minimumPressDuration = 1;
    longpressGesture.allowableMovement = 15;
    longpressGesture.numberOfTouchesRequired = 1;
    
    [imageView addGestureRecognizer:longpressGesture];
    [longpressGesture release];
    
    
    [super viewDidLoad];
}
- (IBAction)tapGestureHandler:(UIGestureRecognizer *)sender{
    if (sender.view.contentMode == UIViewContentModeScaleAspectFit) {
        sender.view.contentMode = UIViewContentModeScaleAspectFill;
    } else {
        sender.view.contentMode = UIViewContentModeScaleAspectFit;
    }
    
}
- (IBAction)pinchGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat scaleValue = [(UIPinchGestureRecognizer *)sender scale];
    
    if (scaleValue > 1) {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue + (scaleValue-1), lastScaleValue + (scaleValue-1));
    }else {
        sender.view.transform = CGAffineTransformMakeScale(lastScaleValue * scaleValue, lastScaleValue * scaleValue);
    } 
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        if (scaleValue > 1) {
            lastScaleValue += (scaleValue - 1);
        }else {
            lastScaleValue += scaleValue;
        }
    }
     
           
}
- (IBAction)rotationGestureHandler:(UIGestureRecognizer *)sender{
    CGFloat rotation = [(UIRotationGestureRecognizer *)sender rotation];
    CGAffineTransform transform = CGAffineTransformMakeRotation(rotation + rotationValue);
    
    sender.view.transform = transform;
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        rotationValue += rotation;
    }
}
- (IBAction)panGestureHandler:(UIGestureRecognizer *)sender{
    CGPoint position = [(UIPanGestureRecognizer *)sender translationInView:imageView];
    sender.view.transform = CGAffineTransformMakeTranslation(position.x + position.x, 
                                                             position.y + position.y);
    
    if (sender.state == UIGestureRecognizerStateEnded) {
        positionValue.x += position.x;
        positionValue.y += position.y;
    }
}
- (IBAction)swipeGestureHandler:(UIGestureRecognizer *)sender{
    UISwipeGestureRecognizerDirection direction =[(UISwipeGestureRecognizer *)sender direction];
    
    switch (direction) {
        case UISwipeGestureRecognizerDirectionUp:
            NSLog(@"向上划动");
            break;
            case UISwipeGestureRecognizerDirectionDown:
            NSLog(@"向下划动");
            break;
            case UISwipeGestureRecognizerDirectionLeft:
            imageIndex++;
            break;
            case UISwipeGestureRecognizerDirectionRight:
            imageIndex--;
            break;
            default:
            break;
    }
    imageIndex = (imageIndex < 0) ? ([images count] - 1):imageIndex % [images count];
    imageView.image = [UIImage imageNamed:[images objectAtIndex:imageIndex]];
}
- (IBAction)longpressGestureHandler:(UIGestureRecognizer *)sender{
    if ([(UILongPressGestureRecognizer *)sender state] == UIGestureRecognizerStateBegan) {
        UIActionSheet *actionSheet = [[UIActionSheet alloc] 
                                      initWithTitle:@"图片操作" 
                                      delegate:self
                                      cancelButtonTitle:nil
                                      destructiveButtonTitle:nil
                                      otherButtonTitles:@"保存", @"复制", nil];
        
        [actionSheet showInView:self.view];
        [actionSheet release];
    }
}
- (void)dealloc {
    [images release];
    [imageView release];
    [super dealloc];
}
- (void)viewDidUnload {
    [self setImageView:nil];
    [super viewDidUnload];
}
@end

多点触摸识别

   有些时候,我们只想简单地去识别用户在屏幕上的操作,而不是只针对某个特定的view,我们可以通过以下四个方法进行屏幕的触摸的识别。

 touchesBegan:withEvent:当有一个或多个手指触摸屏幕时被触发。

 touchesMoved:withEvent:当有一个或多个手指在屏幕上移动时被触发。

 touchesEnded:withEvent:当有一个或多个手指离开屏幕时被触发。

 touchesCancelled:withEvent: 当系统事件(内存溢出警告或者来电)发生时,取消触摸操作。

检测单点触摸

HomeViewController.h code:

#import <UIKit/UIKit.h>
@interface HomeViewController : UIViewController
@property (retain, nonatomic) IBOutlet UIImageView *imageView;
@end
HomeViewController.m code: 

 #import "HomeViewController.h"

@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSSet *allTouches = [event allTouches];
    
    switch ([allTouches count]) {
        case 1:
        {
            UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
            
            if ([touch tapCount] == 1 ) {
                imageView.contentMode = UIViewContentModeScaleAspectFit;
            }else if ([touch tapCount] == 2) {
                imageView.contentMode = UIViewContentModeScaleAspectFill;
            }
        }
            break;
            
        default:
            break;
    }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
}
- (void)dealloc {
    [imageView release];
    [super dealloc];
}
@end

检测多点触摸  

HomeViewController.h code:

#import <UIKit/UIKit.h>
@interface HomeViewController : UIViewController
@property (retain, nonatomic) IBOutlet UIImageView *imageView;
- (CGFloat)distance:(CGPoint)fromPoint toPoint:(CGPoint)toPoint;
@end

HomeViewController.m code:  

#import "HomeViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
@synthesize imageView;
CGFloat originalDistance;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSSet *allTouches = [event allTouches];
    
    switch ([allTouches count]) {
        case 1:{
            UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
            
            if ([touch tapCount] == 1 ) {
                imageView.contentMode = UIViewContentModeScaleAspectFit;
            }else if ([touch tapCount] == 2) {
                imageView.contentMode = UIViewContentModeScaleAspectFill;
            }
        }
            break;
        case 2:{
        
            UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
            UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
            
            CGPoint touch1PT = [touch1 locationInView:[self view]];
            CGPoint touch2PT = [touch2 locationInView:[self view]];
            
            NSLog(@"Touch1:%.0f, %.0f", touch1PT.x, touch1PT.y);
            NSLog(@"Touch2:%.0f, %.0f", touch2PT.x, touch2PT.y);
            
            originalDistance = [self distance:touch1PT toPoint:touch2PT];
                   
        }break;
            
        default:
            break;
    }
}
- (CGFloat)distance:(CGPoint)fromPoint toPoint:(CGPoint)toPoint{
    float lengthX = fromPoint.x - toPoint.x;
    float lengthY = fromPoint.y - toPoint.y;
    return sqrt((lengthX * lengthX) + (lengthY * lengthY));
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    NSSet *allTouches = [event allTouches];
    
    switch ([allTouches count]) {
        case 1:
            break;
    case 2:{
    
        UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
        UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
        
        CGPoint touch1PT = [touch1 locationInView:[self view]];
        CGPoint touch2PT = [touch2 locationInView:[self view]];
        
        NSLog(@"Touch1:%.0f, %.0f", touch1PT.x, touch1PT.y);
        NSLog(@"Touch2:%.0f, %.0f", touch2PT.x, touch2PT.y);
        
        CGFloat currentDistance = [self distance:touch1PT toPoint:touch2PT];
        
        if (currentDistance > originalDistance) {
            imageView.frame = CGRectMake(imageView.frame.origin.x-2,imageView.frame.origin.y-2,
                                         imageView.frame.size.width+4, imageView.frame.size.height+4);
        }else {
            imageView.frame = CGRectMake(imageView.frame.origin.x+2, imageView.frame.origin.y+2,
                                         imageView.frame.size.width-4, imageView.frame.size.height-4);
        }
        originalDistance = currentDistance;
    }break;
            
        default:
            break;
    }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
}
- (void)dealloc {
    [imageView release];
    [super dealloc];
}
@end
原文地址:https://www.cnblogs.com/hanjun/p/2749333.html