3D 触控力度手势可在触控端激活单元格轻触

Posted

技术标签:

【中文标题】3D 触控力度手势可在触控端激活单元格轻触【英文标题】:3D Touch force gesture activates cell tap on touch end 【发布时间】:2016-04-22 20:59:29 【问题描述】:

我在我的应用程序中对UITableView 进行了子类化,以便我可以拦截触摸事件。我正在使用它来允许我在整个视图(包括表格视图的顶部)上提供 3D Touch 手势。

这很好用,但问题是在其中一个单元格上使用 3D Touch,然后松开手指会激活单元格点按。

如果没有施加任何力量,我只需要激活单元格水龙头。我应该解释一下,当您施加压力时,我会在整个屏幕上逐渐淡入图像。

这是我的子类:

protocol PassTouchesTableViewDelegate 
    func touchMoved(touches: Set<UITouch>)
    func touchEnded(touches: Set<UITouch>)


class PassTouchesTableView: UITableView 
    var delegatePass: PassTouchesTableViewDelegate?

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) 
        super.touchesMoved(touches, withEvent: event)

        self.delegatePass?.touchMoved(touches)
    

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) 
        super.touchesEnded(touches, withEvent: event)

        self.delegatePass?.touchEnded(touches)
    

以下是我在触摸结束和移动时从视图控制器调用的方法:

internal func touchMoved(touches: Set<UITouch>) 
    let touch = touches.first

    self.pressureImageView.alpha = (touch!.force / 2) - 1.0


internal func touchEnded(touches: Set<UITouch>) 
    UIView.animateWithDuration(0.2, animations: 
        self.pressureImageView.alpha = 0.0
    )

【问题讨论】:

【参考方案1】:

您可以创建一个名为 isForceTouch 的布尔值,在 touchesBegan 中将其设置为 false,然后一旦检测到强制触摸,将其设置为 true。然后在 didSelectRowAtIndexPath 中,如果 isForceTouch 为真,则返回假。它可能需要调整,但应该可以。

【讨论】:

效果很好。谢谢!

以上是关于3D 触控力度手势可在触控端激活单元格轻触的主要内容,如果未能解决你的问题,请参考以下文章

iOS 3DTouch功能

无法在 Tableview (ios 7) 上禁用多点触控

左侧单点触控 iphone 上带有圆角的 UIImage

如何在 UIPangestureRecognizer 上禁用多点触控?

设计好用的触控操作手势

教你玩转iphone超实用的3D touch功能!