我想重新创建可以在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
表示移动的距离,而不是确切的位置。