touchesMoved在iPhone 6s及更高版本上单击时被调用

8

我有一个自定义的UIButton,并在自定义按钮类中实现了触摸代理。

一切都很好,直到iPhone 6 Plus。所有高于它的设备(如iPhone 6s和7)都会出现问题。

当我单击按钮时,touchesBegan按预期被调用,但同时也调用了touchesMoved,这在我的代码中会产生问题。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     _firstTouch = [[touches anyObject]locationInView:self];
     _isTapped = YES;

     [self.nextResponder.nextResponder  touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
   _isTapped = NO;

   [self.nextResponder.nextResponder touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
if (_isTapped){
    //Functionality
}

为什么在这些设备上会调用touchesMoved方法,我该如何解决?
1个回答

7
可能是因为高分辨率屏幕对任何移动都更加敏感。 当您轻触时,您实际上可能会滚动手指,使其看起来像是一个小的移动。
有两种可能的解决方案。
  1. 检查您的touchesMoved:方法中触摸移动的距离。 如果移动非常小,则在_isTapped检查的目的上忽略它。
  2. 不要覆盖touches ... 方法,使用UITapGestureRecognizer。 让它完成判断什么是轻触和什么不是的所有艰难工作。 它将使您的代码更简单。

我仔细检查了一下,确保我没有移动我的触摸。在旧设备上没有问题,但是在这里有额外的委托。TapRecognizer可能会解决这个问题,但是您认为可以使用触摸委托来解决吗? - Hassy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接