На экране две картинки, на них программно установлены ограничения. При пролистывании влево картинки меняются и становятся такими, какими они должны быть. Если после этого проведите пальцем вправо, то ничего не произойдет и картинки останутся на своих местах. Вот код реализации.
func Swipe() {
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeLeft.direction = .left
self.view.addGestureRecognizer(swipeLeft)
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeRight.direction = .right
self.view.addGestureRecognizer(swipeRight)
}
@objc func handleGesture(gesture: UISwipeGestureRecognizer) -> Void {
if gesture.direction == .right {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations:{
self.setupLayoutImageOne()
}, completion: nil)
self.view.layoutIfNeeded()
} else if gesture.direction == .left {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations:{
self.setupLayoutImageTwo()
}, completion: nil)
self.view.layoutIfNeeded()
}
}
func setupLayoutImageOne()
{
imageOne.translatesAutoresizingMaskIntoConstraints = false
imageTwo.translatesAutoresizingMaskIntoConstraints = false
let layoutGuide = view
NSLayoutConstraint.activate([
imageOne.topAnchor.constraint(equalTo: layoutGuide!.topAnchor),
imageOne.leadingAnchor.constraint(equalTo: layoutGuide!.leadingAnchor),
imageOne.trailingAnchor.constraint(equalTo: layoutGuide!.trailingAnchor,constant: 170) ,
imageOne.bottomAnchor.constraint(equalTo: layoutGuide!.bottomAnchor,constant: 290),
imageTwo.bottomAnchor.constraint(equalTo: layoutGuide!.bottomAnchor,constant: 530),
imageTwo.leadingAnchor.constraint(equalTo: layoutGuide!.leadingAnchor,constant: 200),
imageTwo.trailingAnchor.constraint(equalTo: layoutGuide!.trailingAnchor,constant: 200),
imageTwo.topAnchor.constraint(equalTo: layoutGuide!.topAnchor,constant: 800),
])
}
func setupLayoutImageTwo()
{
imageOne.translatesAutoresizingMaskIntoConstraints = false
imageTwo.translatesAutoresizingMaskIntoConstraints = false
let layoutGuide = view
NSLayoutConstraint.activate([
imageOne.topAnchor.constraint(equalTo: layoutGuide!.topAnchor),
imageOne.leadingAnchor.constraint(equalTo: layoutGuide!.leadingAnchor),
imageOne.trailingAnchor.constraint(equalTo: layoutGuide!.trailingAnchor,constant: 299) ,
imageOne.bottomAnchor.constraint(equalTo: layoutGuide!.bottomAnchor,constant: 570),
imageTwo.bottomAnchor.constraint(equalTo: layoutGuide!.bottomAnchor),
imageTwo.leadingAnchor.constraint(equalTo: layoutGuide!.leadingAnchor),
imageTwo.trailingAnchor.constraint(equalTo: layoutGuide!.trailingAnchor),
imageTwo.topAnchor.constraint(equalTo: layoutGuide!.topAnchor),
])
}
Когда я делаю свайп вправо, он выдает такие ошибки
Попытается восстановить, нарушив ограничение (active, names: ' | ': UIView: 0x10080e7a0)>
Создайте символическую c точку останова в UIViewAlertForUnsatisfiableConstraints, чтобы перехватить это в отладчике. Методы в категории UIConstraintBasedLayoutDebugging в UIView, перечисленные в, также могут быть полезны. Неустранимая ошибка: неожиданно найденный ноль при неявном развертывании необязательного значения 2020-01-28 15: 09: 59.920450 + 0200 ThemeGame [27748: 2857822] Неустранимая ошибка: неожиданно обнаруженный ноль при неявном развертывании необязательного значения