#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