我有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
被触发。这是为什么?
答案 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;
}