Я просмотрел SO и другие места в Интернете и пока не смог найти решение.У меня UILongPressGestureRecognizer на одном контроллере представления, который выполняет анимацию на UIView, а затем представляет другой контроллер представления (если пользователь не двигает пальцем во время анимации).Я хотел бы отклонить второй контроллер представления, когда пользователь поднимает палец, но у меня возникли проблемы.
Мой текущий подход - добавить еще один UILongPressGestureRecognizer ко второму контроллеру представления и исключить контроллер представления, когда его состояние .ended;однако я не знаю, как связать два распознавателя жестов так, чтобы я мог начать касание в одном контроллере представления и завершить в другом.
Я прикрепил соответствующий код ниже
В первом контроллере вида
@objc private func pinAnimation(sender: UILongPressGestureRecognizer) {
if let headerView = projectView.projectCollectionView.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(row: 0, section: 0)) as? ProjectHeaderView {
switch sender.state {
case .began:
let frame = headerView.pinButton.frame
UIView.setAnimationCurve(.linear)
UIView.animate(withDuration: 1, animations: {
headerView.pinProgressView.frame = frame
}, completion: { (_) in
if (headerView.pinProgressView.frame == headerView.pinButton.frame) {
let notification = UINotificationFeedbackGenerator()
notification.notificationOccurred(.success)
let homeVC = HomeViewController()
self.present(homeVC, animated: true, completion: {
homeVC.longPress(sender)
let height = headerView.pinButton.frame.height
let minX = headerView.pinButton.frame.minX
let minY = headerView.pinButton.frame.minY
headerView.pinProgressView.frame = CGRect(x: minX, y: minY, width: 0, height: height)
})
}
})
case .ended:
//cancel current animation
let height = headerView.pinProgressView.frame.height
let minX = headerView.pinProgressView.frame.minX
let minY = headerView.pinProgressView.frame.minY
UIView.setAnimationCurve(.linear)
UIView.animate(withDuration: 0.5) {
headerView.pinProgressView.frame = CGRect(x: minX, y: minY, width: 0, height: height)
}
default:
break
}
}
}
Во втором контроллере вида
override func viewDidLoad() {
super.viewDidLoad()
let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPress(_:)))
view.addGestureRecognizer(longPressRecognizer)
}
@objc func longPress(_ sender: UILongPressGestureRecognizer) {
switch sender.state {
case .ended:
self.dismiss(animated: true, completion: nil)
default:
break
}
}
Любая помощь / руководство будет высоко ценится!