Есть много способов сделать это, но проще всего просто использовать центрированный горизонтальный UIStackView, который содержит только один ImageView. Когда переключатель перевернут, добавьте второе изображение в стеке, вызвав insertArrangedSubview(:at:), и stackView позаботится о поддержании центрирования и любого запрошенного интервала. Аналогично, когда выключатель выключен, просто звоните removeArrangedSubview(:), и все возвращается на свои места.
Если вы не используете iOS 9 и не имеете UIStackView, вы можете просто перетащить IBOutlet в представление, которое вы хотите ограничить центром X, и добавить к свойству .constant и анимации layoutIfNeeded, чтобы он скользил вправо ,
class ViewController: UIViewController{
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var imageViewCenterXConstraint: NSLayoutConstraint!
let padding = CGFloat(10)
@IBAction func tapButton(_ sender: Any) {
imageViewCenterXConstraint.constant = imageView.frame.size.width/2 + padding
UIView.animate(withDuration: 0.25) { self.view.layoutIfNeeded()}
}
}
Вы пытаетесь программно создать второй 'UIImageView' или он уже настроен в IB? – Aaron
Я добавил розетку для UIImageViews и выхода и действия для UISwitch. Я могу скрыть/показать изображение правильно с помощью коммутатора, но я не знаю столько о программном решении горизонтальных ограничений в контейнере. –
@Aaron - UIImageViews созданы в IB заранее. –