Sea*_*Lee 8 uiscrollview uigesturerecognizer ios
我有一个看似基本的问题,但无法弄明白.
基本问题是:如何以编程方式将一个手势识别器从处理程序置于失败状态,而它位于UIGestureRecognizerStateBegan或UIGestureRecognizerStateChanged?
更详细的解释:我在UIScrollView中有一个用于UIView的长按手势识别器.我做了
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
因为否则一旦用户将手指放在视图中,我就无法滚动滚动视图.这是基本的触摸,如safari,你在一个链接上按住手指,突出链接,但向上或向下滚动 - 然后链接没有突出显示和滚动视图移动.
我现在可以正常工作,因为这两个手势都被识别了,但如果我能检测到长按手势识别器的StateChanged中的移动会更好,如果它超过20像素左右,只需以编程方式使longpress失败.
这可能吗?还是我在错误的地方挖掘?
发布问题后,我立即发现了另一个问题。
这是我现在在手势识别处理程序中执行的操作:
else if (sender.state == UIGestureRecognizerStateChanged) {
CGPoint newTouchPoint = [sender locationInView:[self superview]];
CGFloat dx = newTouchPoint.x - initTouchPoint.x;
CGFloat dy = newTouchPoint.y - initTouchPoint.y;
if (sqrt(dx*dx + dy*dy) > 25.0) {
sender.enabled = NO;
sender.enabled = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果手指在任何方向上移动超过25个像素,则将enabled属性设置为NO将使识别器失败。这样就可以完成我想要的!
| 归档时间: |
|
| 查看次数: |
7086 次 |
| 最近记录: |