的情況下: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