Изменение размера слайдера для просмотра изображения

#swift #uiimageview #frame

#быстрый #uiimageview uiimageview #рамка

Вопрос:

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

 @IBAction func sizeSlider(_ sender: UISlider) {
    
    let value = Int(sender.value)
    var sizeValue:Int = 200
    
    switch value {
    case 0...1:
        sizeLabel.text = "100x100"
        sizeValue = 100
    case 2:
        sizeLabel.text = "150x150"
        sizeValue = 150
    case 3:
        sizeLabel.text = "200x200"
        sizeValue = 200
    case 4:
        sizeLabel.text = "250x250"
        sizeValue = 250
    case 5:
        sizeLabel.text = "300x300"
        sizeValue = 300
    default:
        print("Error")
    }
    
    dartBoardImage.frame.size.width = CGFloat(sizeValue)
    dartBoardImage.frame.size.height = CGFloat(sizeValue)
}
 

Ответ №1:

«У меня изображение выровнено по горизонтали и вертикали с ограничениями в раскадровке»

Вы не можете смешивать автоматическую компоновку (ограничения) с явными frame изменениями.

То, что вы (вероятно) хотите сделать, это…

В раскадровке:

  • задайте для вашего dartBoardImage изображения ограничение по ширине 100
  • также задайте для него ограничение соотношения 1:1 сторон… это сохранит его высоту равной его ширине
  • ограничьте его по центру в вашем представлении

Теперь перетащите Ctrl-Drag из ограничения ширины в код вашего класса и создайте для него выход:

 @IBOutlet var imageWidthConstraint: NSLayoutConstraint!
 

Теперь ваш код слайдера изменит .constant свойство этого ограничения, чтобы обновить размер:

 imageWidthConstraint.constant = CGFloat(sizeValue)
 

Таким образом, ваша полная sizeSlider функция становится:

 @IBAction func sizeSlider(_ sender: UISlider) {
    
    let value = Int(sender.value)
    var sizeValue:Int = 200
    
    switch value {
    case 0...1:
        sizeLabel.text = "100x100"
        sizeValue = 100
    case 2:
        sizeLabel.text = "150x150"
        sizeValue = 150
    case 3:
        sizeLabel.text = "200x200"
        sizeValue = 200
    case 4:
        sizeLabel.text = "250x250"
        sizeValue = 250
    case 5:
        sizeLabel.text = "300x300"
        sizeValue = 300
    default:
        print("Error")
    }
    
    // change the image view's width constraint
    imageWidthConstraint.constant = CGFloat(sizeValue)
    
    // don't do this
    //dartBoardImage.frame.size.width = CGFloat(sizeValue)
    //dartBoardImage.frame.size.height = CGFloat(sizeValue)
}
 

Комментарии:

1. Работает отлично: D