swift4: как анимировать UIView с NSLayoutConstraint - PullRequest
0 голосов
/ 25 июня 2018

я хочу изменить ширину uiview1 (созданного языком визуального формата NSLayoutConstraint) с помощью анимации

это мои коды:

var constraintArray : [NSLayoutConstraint] = []

constraintArray += NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[uiview1]-10-|", options: [], metrics: nil, views: viewsDict)

constraintArray += NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[uiview2]-10-|", options: [], metrics: nil, views: viewsDict)

constraintArray += NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[uiview3]-10-|", options: [], metrics: nil, views: viewsDict)

constraintArray += NSLayoutConstraint.constraints(withVisualFormat: "V:|-100-[uiview1]-20-[uiview2]-30-[uiview3]-30-|", options: [], metrics: nil, views: viewsDict)

NSLayoutConstraint.activate(constraintArray)


func changeUIViewWidth{

    //i don't know how to change width of uiview1 by animation
    UIView.animate(withDuration: 3){
       self.view.layoutIfNeeded()
    }
}

как я могу это сделать?

1 Ответ

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

В вашем случае это будет сложно, потому что у вас нет явного ограничения ширины для uiview1, которое вы можете изменить в коде. Самое близкое, что у вас есть, это проверка ограничений в

constraintArray += NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[uiview1]-10-|", options: [], metrics: nil, views: viewsDict)

и настройте каждое ограничение (должно быть два ограничения), возвращаемое из этой строки, и измените их constant.

let uiview1Constraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[uiview1]-10-|", options: [], metrics: nil, views: viewsDict)

...

// Make uiview1 thinner
uiview1Constraints[0].constant = 20
uiview1Constraints[1].constant = 20
UIView.animate(withDuration: 3) {
    self.view.layoutIfNeeded()
}

Я бы рекомендовал использовать NSLayoutAnchor для создания ограничений. Это проще и проще для чтения, а также менее подвержен ошибкам. Вы по-прежнему можете манипулировать constant непосредственно после их создания.

...