mysql touches_touches - 缘起缘落 - OSCHINA - 中文开源技术交流社区

这段代码展示了在iOS应用中如何处理`touchesBegan`和`touchesMoved`事件来实现捏合手势的缩放效果。通过获取并比较两个手指在屏幕上的初始位置和移动后的位置,计算出缩放比例,并据此调整视图的大小。当只有一个手指触摸屏幕时,系统不会处理捏合操作。
摘要由CSDN通过智能技术生成

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值