的情况下:https://github.com/ArtworkAD/ios_jumping_y.git的UITableView与UIPanGestureRecognizer导致 “跳跃” 触摸
容器
class ContainerController: UIViewController {
@IBOutlet weak var container: UIView!
@IBOutlet weak var foregroundTopSpace: NSLayoutConstraint!
@IBOutlet weak var foregroundBottomSpace: NSLayoutConstraint!
}
容器被连接到所述的UITableViewController其右边。
我想做什么
用户滚动表,当他到达顶部我想用相同的运动向下移动台。所以我只是改变容器视图的顶部/底部空间。但是这会导致表跳转。
class MainController: UITableViewController, UIGestureRecognizerDelegate {
var panRecognizer: UIPanGestureRecognizer!
var gotStart: Bool = true
var startTouch: CGPoint!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.bounces = false
self.panRecognizer = self.tableView.panGestureRecognizer
self.panRecognizer.addTarget(self, action: "pan:")
self.tableView.addGestureRecognizer(self.panRecognizer)
}
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
func pan(rec:UIPanGestureRecognizer){
if let parent = self.parentViewController as? ContainerController {
var y = self.tableView.contentOffset.y
var touch = rec.locationInView(self.view)
// JUMPING y
println(touch.y)
if y == -64 {
if self.gotStart || y < -64 || y > -64 {
self.startTouch = touch
self.gotStart = false
} else {
if rec.state == .Changed {
var changedVerticalHeight = (self.startTouch.y - touch.y)*(-1)
if changedVerticalHeight <= parent.view.frame.size.height && touch.y >= changedVerticalHeight {
parent.foregroundTopSpace.constant = changedVerticalHeight
parent.foregroundBottomSpace.constant = -changedVerticalHeight
}
} else if rec.state == .Ended {
parent.foregroundTopSpace.constant = 0
parent.foregroundBottomSpace.constant = 0
self.gotStart = true
}
}
}
}
}
}
结果:
任何想法什么是错?容器视图必须有一些问题,因为当我直接移动表视图时,不会跳跃。
如果您对我的回答有任何疑问,我有您的修改过的项目。我可以毫无问题地寄给你。 – 2015-04-08 23:01:36
@VictorSigler是的,请在github上提出拉取请求以向我显示更改。我接受了你的回答:) – 2015-04-09 07:41:17
我已经在GitHub中完成了请求,让我知道你是否有任何问题。 – 2015-04-09 13:38:33