swift 4 Анимация ограничений не работает правильно - PullRequest
0 голосов
/ 04 июня 2018

У меня есть пользовательская панель тапов, которая содержит collectionView с 4 элементамиУ меня был белый вид, который указывает на выбранный элемент и изменить его положение (с анимацией) при нажатии на другой элемент collectionView.Позиционирование белого вида с ограничениями, и я изменяю ограничение левого якоря на animate

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let x = CGFloat(indexPath.item) * frame.width / 4
        self.horizontalBarLeftAnchorConstraint?.constant = x
        UIView.animate(withDuration: 0.75, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
            self.layoutIfNeeded()
        }, completion: nil)
    }

Анимация не работает должным образом, в начале ее сгущения располагаются на 1 ширине (белого вида) перед текущей позицией и начинаютсяанимация с этой позиции

Я нахожу проблему // У меня была другая анимация этого ограничения в ответ на прокрутку представления коллекции, и здесь у меня была двойная анимация, которая производит такие прыжки, я удаляю вторую анимацию и теперь всевыглядит хорошо

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы не задали никаких условий анимации, может быть, я не понимаю ваш вопрос.Но вы должны использовать:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    // BEFORE ANIMATION CONTEXT

    UIView.animate(withDuration: 0.75, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {

    // ANIMATION TILL END CONTEXT
    self.layoutIfNeeded

    }, completion: {

    // AFTER ANIMATION CONTEXT

    })
}
0 голосов
/ 04 июня 2018
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: .curveEaseInOut, animations: {

       let x = CGFloat(indexPath.item) * frame.width / 4
       self.horizontalBarLeftAnchorConstraint?.constant = x
        self.layoutIfNeeded()
    }, completion: nil)
}
...