在桌面视图上滑动视图时没有调用touchesEnded

时间:2015-10-23 11:20:48

标签: ios uitableview uipangesturerecognizer

我有一个简单的tableview,只有包含文本的行(单元格是标准的UITableViewCell,我只是修改它们的.textLabel属性)。

我已经以编程方式在桌面视图中添加了一个UIView,并使其看起来像桌子上的红色方块。我还为这个方形视图分配了一个UIPanGestureRecognizer。我们的想法是能够在整个桌面视图中拖动方形视图。

我可以看到(覆盖)函数touchesBegan和touchesCancelled是如何正常调用的。 touchesEnded仅在我不滑动方形视图时调用,这只是轻敲,不拖动。

通过阅读类似的帖子我明白问题是UIGestureRecognizer正在识别滑动,它会覆盖touchesEnded,但我不知道如何处理这个。

非常感谢您的帮助!!

更新以包含代码。

来自TableViewController。令牌是我想要拖动的自定义视图("方形视图"之前提到过)。

override func viewDidAppear(animated: Bool) {
    let token = Token(frame: CGRect(x: 10, y: 10, width: 20, height: 20), color: UIColor.redColor())
    self.view.addSubview(token)
    self.view.bringSubviewToFront(token)
}

令牌,我的自定义视图:

class Token: UIView {
var lastLocation:CGPoint = CGPoint(x: 10, y: 10)

init(frame: CGRect, color: UIColor) {
    super.init(frame: frame)
    self.backgroundColor = color
    let panRecognizer = UIPanGestureRecognizer(target:self, action:"detectPan:")
    self.gestureRecognizers = [panRecognizer]
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func detectPan(recognizer:UIPanGestureRecognizer) {
    let translation  = recognizer.translationInView(self.superview!)
    self.center = CGPointMake(lastLocation.x + translation.x, lastLocation.y + translation.y)
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    print("began")
    // Promote the touched view
    self.superview?.bringSubviewToFront(self)

    // Remember original location
    lastLocation = self.center
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    print("touchesEnded")
}

}

1 个答案:

答案 0 :(得分:1)

cancelsTouchesInView上有一个属性UIPanGestureRecognizer。将其设置为NO,并将触摸传递到UIView下方。

然后,您可以实施touchesBegan功能来移动视图。