访问 UIPanGestureRecognizer 驱动 tableView(_:leadingSwipeActionsConfigurationForRowAt:)

Access the UIPanGestureRecognizer driving tableView(_:leadingSwipeActionsConfigurationForRowAt:)

我正在使用新的 iOS 11 tableView(_:leadingSwipeActionsConfigurationForRowAt:)tableView(_:trailingSwipeActionsConfigurationForRowAt:) 方法向我的 table 单元格行添加轻扫操作。我需要一些与平移手势相关的额外动画。如何访问我假设驱动这些方法的手势识别器?

下面是一些相关代码:

func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    //
    // I WANT TO DO SOME ANIMATION STUFF WITH THE PAN GESTURE RECOGNIZER HERE
    //

    let item = coreData.listResultsController.object(at: indexPath)
    let action = UIContextualAction(style: .normal, title: "Quantity", handler: { (action, view, completionHandler) in
        print("Show count now")
    })
    let sortOrder = item.category?.sortOrder ?? 0
    action.backgroundColor = UIColor.OMGColors.section[sortOrder]
    action.image = UIGraphicsImageRenderer(size: CGSize(width: 30, height: 30)).image { _ in
        guard let image = UIImage(named:"Pound Sign") else {
            return
        }
        image.draw(in: CGRect(x: 0, y: 0, width: 30, height: 30))

    }
    let configuration = UISwipeActionsConfiguration(actions: [action])
    return configuration

}

是否可以在此处访问平移手势识别器,或者我是否需要停止使用 tableView(_:leadingSwipeActionsConfigurationForRowAt:)tableView(_:trailingSwipeActionsConfigurationForRowAt:) 并自行滚动以便我可以访问?

您可以访问它们,但不幸的是,我不确定它对您有多大帮助。

您会在表格视图的 gestureRecognizers 属性 中找到它们,就像任何其他手势识别器一样。

但是,它是 UIPanGestureRecognizer 的自定义子 class,似乎是私有的 API:

_UISwipeActionPanGestureRecognizer

您可以转换为 UIPanGestureRecognizer,但可能不建议尝试,因为 class 是未记录的私有 API; iOS 版本之间这些东西可能会在没有任何警告的情况下发生变化,而且 Apple 无论如何都不喜欢你做那种事。