touches

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

获取刚开始触摸屏幕时的两个点

   NSArray * allTouches = [touches allObjects];

   UITouch * firstTouch = [allTouches firstObject];

    UITouch * secondTouch = [allTouches lastObject];

    _firstPreviousLocation = [firstTouch locationInView:self];

    _secondPreviousLocation = [secondTouch locationInView:self];
    
    
    
}




- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
   

只有一个手指触摸屏幕,则不处理捏合操作.
    if (1 == [touches count]) {
        return;
    }
 

获得两个手指移动之后的位置.
    NSArray  * allTouches = [touches allObjects];
    UITouch * firstTouch = [allTouches firstObject];
    UITouch * secoundTouch = [allTouches lastObject];
    

 

获取两个手指之前的位置
    CGPoint _firstPreviousLocation = [firstTouch previousLocationInView:self];
    CGPoint _secondPreviousLocation = [secoundTouch previousLocationInView:self];
  

获取两个手指当前的位置
    CGPoint firstCurrentLocation = [firstTouch locationInView:self];
    CGPoint sencondCurrentLocation = [secoundTouch locationInView:self];
    
    
    
 

获取之前两个点距离
    CGFloat previousDistance = [self distanceOfPoint1:_firstPreviousLocation point2:_secondPreviousLocation];
    

获取当前两个点距离
    
    CGFloat currentDistance = [self distanceOfPoint1:firstCurrentLocation point2:sencondCurrentLocation];
    
 

求变化的比例  处理previousDistance 可能为0 的情况 . 为0 就初一1
 

CGFloat scale = currentDistance / previousDistance ? previousDistance : 1;
    CGFloat scale = currentDistance / previousDistance;
 

修改视图的大小按比例缩放

    self.bounds = CGRectMake(0, 0, self.bounds.size.width * scale , self.bounds.size.height * scale);
    
  

存储当前点

   _firstPreviousLocation = firstCurrentLocation;

   _secondPreviousLocation = sencondCurrentLocation;
}




计算两个点的距离
- (CGFloat)distanceOfPoint1:(CGPoint)point1 point2:(CGPoint)point2
{
    CGFloat dx = point1.x-point2.x;
    CGFloat dy = point1.y-point2.y;
    return sqrt(pow(dx, 2) + pow(dy, 2));
    
}




你可能感兴趣的:(触摸,touches)