我想重新创建可以在delete上激活的UITableViewCell函数,但是要在右侧具有它,我想在左侧具有它(提示我重新创建它的原因)。

因此,我在每个单元格上添加了一个UIPanGestureRecognizer,并实现了这两个委托方法:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
}

func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
        let cell = gestureRecognizer.view!
        if gestureRecognizer is UIPanGestureRecognizer {
            let translation = (gestureRecognizer as! UIPanGestureRecognizer).translationInView(cell.superview!)
            if abs(translation.x) > abs(translation.y) {
                return true
            }
        }

        return false
}


然后,我实现了处理平底锅的动作:

func rightPan(sender: UIPanGestureRecognizer) {
    var cellFrame = sender.view!.frame

    let translation = sender.translationInView(sender.view!.superview!)

    switch sender.state {
    case .Began:
        println("Started")
    case .Changed:
        cellFrame.origin.x = translation.x

        println("Changed")
    default:
        break
    }
}


当我尝试拖动一个单元格时,我可以在日志中看到“开始”和“已更改”,但屏幕上什么也没有。我错过了什么?

最佳答案

您应该设置框架,而不是原点。
在执行任何操作之前,请保存初始原点x。
然后,在您的.Changed情况下,您可以:

let newFrame = CGRect(originX + translation.x, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height)
// then set your new frame..
cellFrame.frame = newFrame


另外,您可能想要添加转换值。 translation.x表示移动的距离,而不是确切的位置。

10-08 01:01