UILongPressGestureRecognizer识别其视图外的触摸

时间:2013-07-04 10:58:53

标签: ios objective-c cocoa-touch uigesturerecognizer

我有subview imageview PanGestureRecognizer,主视图有LongPressGestureRecognizer。我已将longpress仅添加到此视图中:

screenRecognize = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(screenTaped:)];
screenRecognize.minimumPressDuration = 0.0;
self.userInteractionEnabled = YES;
[self addGestureRecognizer:screenRecognize];

这是imageview:

imageViewPanRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewPulled:)];

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(310, 50, 10, 40)];
imageView.image = [UIImage imageNamed:@"image.png"];
imageView.userInteractionEnabled = YES;
[imageView addGestureRecognizer:imageViewPanRecognizer];
[self addSubview:imageView];

当我触摸imageView时,UILongPressRecognizer被触发。这是为什么?

2 个答案:

答案 0 :(得分:2)

答案已经在您的问题中。你设置

screenRecognize.minimumPressDuration = 0.0;

这意味着,UILongPressGestureRecognizer将像UITapGestureRecognizer一样工作。按行

[self addGestureRecognizer:screenRecognize];

你在自我的所有地方都有效。

现在,当您在自我中添加imageView时,imageView还将响应UILongPressGestureRecognizer以及仅在imageView上处于活动状态的UIPanGestureRecognizer。因此,触摸imageView会触发UILongPressGestureRecognizer。


要解决此问题,您可以尝试增加 minimumPressDuration 值。

答案 1 :(得分:0)

1)为什么你使用minimumPressDuration = 0的长手势?无法正确使用平移手势?

2)如果你想让这些手势一起工作,试试这样的事情:

longGesture.delegate = self;
...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

3)如果你不知道如果用户平移到UIImageView长手势禁用,请尝试这样的事情:

self.tag = 1;
longGesture.delegate = self;
...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return touch.view.tag == 1;
}