【问题标题】:Slider resizing image view调整图像视图大小的滑块
【发布时间】:2021-02-05 15:34:50
【问题描述】:
我正在尝试制作一个滑块来调整我的图像大小并将它们置于视图的中心。我已经尝试过各种东西,但在删除所有非工作代码后留下了这个。我在情节提要中将图像水平和垂直与约束对齐,但似乎没有帮助。这是我的糟糕代码。
@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)
}
【问题讨论】:
标签:
swift
uiimageview
frame
【解决方案1】:
“我在情节提要中将图像水平和垂直排列成约束”
您不能将自动布局(约束)与明确的frame 更改混合使用。
你(可能)想做的是……
在故事板中:
- 为您的
dartBoardImage 图像视图提供100 的宽度约束
- 还给它一个纵横比约束
1:1 ...这将保持它的高度等于它的宽度
- 将其限制在视图的中心
现在,Ctrl-Drag 从 Width 约束到你的类代码,并为它创建一个出口:
@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)
}