Я проверяю все решения, но не нашел и сопоставляю дело для себя.У меня tableView с ячейками.В некоторых ячейках также есть TableView с разделом заголовка и ячейками.Раньше я добавлял UIPanGestureRecognizer в headerSerction, чтобы добавить вид слайдов (удалить ячейку и т. Д.). По некоторым причинам я не смог добавить еще одну строку для реализации основных методов.Проблема теперь, когда я прокручиваю основной TableView, приоритет устанавливает, чтобы провести горизонтальные представления внутри ячеек (внутренние разделы tableView содержат UIPanGestureRecognizer).Как я могу это исправить?
Раздел заголовка содержит:
func setupGesture(){
let gesture = UIPanGestureRecognizer(target: self, action: #selector(wasDragged(_:)))
gesture.cancelsTouchesInView = false
contentsView.addGestureRecognizer(gesture)
contentsView.isUserInteractionEnabled = true
gesture.delegate = self
}
также, перетащите действие:
@objc
func wasDragged(_ gestureRecognizer: UIPanGestureRecognizer) {
if gestureRecognizer.state == UIGestureRecognizerState.began || gestureRecognizer.state == UIGestureRecognizerState.changed {
let translation = gestureRecognizer.translation(in: self.contentsView)
print(gestureRecognizer.view!.frame.minX)
if(gestureRecognizer.view!.frame.minX < 80) || (gestureRecognizer.view!.frame.minX > -160){
gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y: gestureRecognizer.view!.center.y)
}else {
gestureRecognizer.view!.center = CGPoint(x: 160, y: 0)
}
gestureRecognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.contentsView)
}else{
if(gestureRecognizer.view!.frame.minX <= 40) && (gestureRecognizer.view!.frame.minX >= 0){
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2), y: gestureRecognizer.view!.center.y)
})
}else if(gestureRecognizer.view!.frame.minX >= 40) && (gestureRecognizer.view!.frame.minX >= 0){
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) + 80, y: gestureRecognizer.view!.center.y)
})
}else if(gestureRecognizer.view!.frame.minX >= -40) && (gestureRecognizer.view!.frame.minX <= 0){
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2), y: gestureRecognizer.view!.center.y)
})
}else if(gestureRecognizer.view!.frame.minX <= -40) && (gestureRecognizer.view!.frame.minX >= -80){
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) - 80, y: gestureRecognizer.view!.center.y)
})
}else if(gestureRecognizer.view!.frame.minX <= -80) && (gestureRecognizer.view!.frame.minX >= -120){
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) - 80, y: gestureRecognizer.view!.center.y)
})
}else if(gestureRecognizer.view!.frame.minX <= -120) && (gestureRecognizer.view!.frame.minX <= 0){
UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) - 160, y: gestureRecognizer.view!.center.y)
})
}
}
}