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