如何停止 3d touch 中断其他触摸事件?

How to stop 3d touch its interrupt other touch events?

我在当前 UIViewController 中有 touchesMoved 事件的视图,当触摸在屏幕中移动时它会绘制一些东西(免费绘制)

然后我在视图中添加一个 subView 并将 UITapGestureRecognizer(set numberOfTapsRequired 2) 与子视图绑定, 如果检测到双击,我会将 UIImageView 移动到单击位置。 当我再次尝试绘制时,出现了错误,现在绘制的线条不流畅(有些线条不显示)

由于 iPhone6s 和 6s Plus 的 3D Touch,所以我无法检测到 touchesEnded 中的 tapCount。我该怎么办?

最好的方法是在应用启动时停止 3d touch :

根据 Apple 文档,您可以在此处查看:Apple Docs

用户可以在您的应用处于 运行 时关闭 3D Touch,因此请阅读此 属性 作为 traitCollectionDidChange: 委托方法实现的一部分。

为确保您的所有用户都可以使用您应用的功能,请根据 3D Touch 是否可用来分支您的代码。当它可用时,利用 3D Touch 功能。当它不可用时,提供替代方法,例如使用触摸和按住,使用 UILongPressGestureRecognizer class.

实现

请参阅 iOS 人机界面指南,了解如何增强您的应用与 3D Touch-capable 设备用户的交互,同时又不让其他用户落伍。

最佳代码:

@interface ViewController () <UIViewControllerPreviewingDelegate>
@property (nonatomic, strong) UILongPressGestureRecognizer *longPress;
For backward compatibility I’ll also add a long press gesture recogniser here. Should our sample app be run on a device without 3D Touch support, at least the preview can be brought up via a long press gesture.

We’ll check if 3D Touch is available using something like the following method. To complete the setup, I’ve also included a custom initialiser for the long press gesture.

    - (void)check3DTouch {

        // register for 3D Touch (if available)
        if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {

            [self registerForPreviewingWithDelegate:(id)self sourceView:self.view];
            NSLog(@"3D Touch is available! Hurra!");

            // no need for our alternative anymore
            self.longPress.enabled = NO;

        } else {

            NSLog(@"3D Touch is not available on this device. Sniff!");

            // handle a 3D Touch alternative (long gesture recognizer)
            self.longPress.enabled = YES;

            }
    }

    - (UILongPressGestureRecognizer *)longPress {

        if (!_longPress) {
            _longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(showPeek)];
            [self.view addGestureRecognizer:_longPress];
        }
        return _longPress;
    }