首页 > 代码库 > touches

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));
    
}



/**
     frame : 包含四个参数 矩形区域左上角的XY坐标, 矩形区域的宽和高
     
     frame 是相对于父视图的坐标原点的位置.
     
     bounds: 包含四个参数:矩形区域左上角的坐标 , 矩形区域的宽和高 , 但是x 和y是相对于自身坐标的坐标原点的距离. 默认矩形区域左上角的点和自身坐标系的坐标原点重合 .
     blueView.bounds = CGRectMake(-20, -20, 200, 200); 变得是坐标原点.
     
     修改bounds左上角的位置,会影响自身坐标系的坐标原点的位置, 自身视图的位置不会改变
     */
    //bounds

touches