【问题标题】: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)
    }
    

    【讨论】:

    • 完美运行:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多