我有一个简单的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")
}
}
答案 0 :(得分:1)
cancelsTouchesInView
上有一个属性UIPanGestureRecognizer
。将其设置为NO
,并将触摸传递到UIView
下方。
然后,您可以实施touchesBegan
功能来移动视图。