我使用 UILongPressGestureRecognizer 来跟踪 UIView 内的触摸,这就是我的代码
-(void)tapGes:(UILongPressGestureRecognizer *)tapGesture
{
CGPoint location=[tapGesture locationInView:self.view];
UIView *view=tapGesture.view;
switch (tapGesture.state)
{
case UIGestureRecognizerStateBegan:
NSLog(@"enter");
break;
case UIGestureRecognizerStateEnded:
NSLog(@"ended");
break;
case UIGestureRecognizerStateChanged:
if (location.x>view.frame.size.width ||
location.y>view.frame.size.height)
{
NSLog(@"out");
return;
}
NSLog(@"change");
break;
default:
break;
}
}
当状态 UIGestureRecognizerStateChanged 中的触摸脱离 UIView 时我想做什么,我不再跟踪它,这样我就不会到达状态 UIGestureRecognizerStateEnded 如何实现这一点?
最佳答案
您始终可以向层次结构添加额外的 View ,并将手势添加到该 View 。这将使您能够跟踪手势位置并根据 subview 的框架进行检查。我的意思是,如果您当前的 View 是 100x100 点,您可以为其创建一个 120x120 点的透明父 View 。将手势添加到 120 点 View ,然后将手势的位置与 View 第一个 subview 的框架进行比较。
-(void)tapGes:(UILongPressGestureRecognizer *)tapGesture
{
CGPoint location=[tapGesture locationInView:tapGesture.view];
UIView *view = tapGesture.view;
switch (tapGesture.state)
{
case UIGestureRecognizerStateBegan:
NSLog(@"enter");
break;
case UIGestureRecognizerStateEnded:
NSLog(@"ended");
break;
case UIGestureRecognizerStateChanged:
if (CGRectContainsPoint([view.subviews[0] frame], location)) {
// location is within view
}else{
// location has exited view
}
NSLog(@"change");
break;
default:
break;
}
}
关于ios - UILongPressGestureRecognizer 退出 UIView 时不跟踪触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18559382/