Как я могу обновить ширину UIView с помощью UISlider? - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь изменить ширину UIView с помощью ползунка. Моя проблема в том, что вместо обновления ширины видов мой код добавляет новые виды. Я не знаю, как обновить вид с быстрыми игровыми площадками.

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {

    var feelings01Slider: UISlider!
    var feelingsWidth01 = 100

    var dayFeelings01: UIView!
    var dayFeelings02: UIView!
    var dayFeelings03: UIView!

    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white
        self.view = view

        feelings01Slider = UISlider()
        feelings01Slider.frame = CGRect(x: 62, y: 375, width: 250, height: 20)
        feelings01Slider.minimumValue = 1
        feelings01Slider.maximumValue = 248
        feelings01Slider.value = 100
        feelings01Slider.isContinuous = true

        feelings01Slider.addTarget(self, action: #selector(sliderValueDidChange(sender:)), for: .valueChanged)
        setUpFeelings()

        view.addSubview(feelings01Slider)
    }

    func setUpFeelings() {

        feelingsWidth01 = Int(feelings01Slider.value)
        var feelingsX02 = feelingsWidth01 + 62
        var feelingsWidth02 = 80
        var feelingsX03 = feelingsX02 + feelingsWidth02
        var feelingsWidth03 = 70

        dayFeelings01 = UIView(frame: CGRect(x: 62, y: 100, width: feelingsWidth01, height: 250))
        dayFeelings01.backgroundColor = .yellow

        dayFeelings02 = UIView(frame: CGRect(x: feelingsX02, y: 100, width: feelingsWidth02, height: 250))
        dayFeelings02.backgroundColor = .blue

        dayFeelings03 = UIView(frame: CGRect(x: feelingsX03, y: 100, width: feelingsWidth03, height: 250))
        dayFeelings03.backgroundColor = .red

        view.addSubview(dayFeelings01)
        view.addSubview(dayFeelings02)
        view.addSubview(dayFeelings03)

    }

    @objc func sliderValueDidChange(sender:UISlider) {
        feelingsWidth01 = Int(sender.value)
        dayFeelings03.removeFromSuperview()
        dayFeelings02.removeFromSuperview()
        dayFeelings01.removeFromSuperview()
        setUpFeelings()
    }


}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

Я новичок в программировании, так что извините, если мой код кажется грязным.

1 Ответ

0 голосов
/ 20 марта 2019

Вам не нужно заменять виды новыми, размерами разных размеров. Вы можете просто изменить их кадры. Замените свое действие селектора ползунка этим:

@objc func sliderValueDidChange(sender:UISlider) {
    dayFeelings01.frame.size.width = CGFloat(sender.value)
}

Примечание: поскольку желтый вид был добавлен сначала , он расширяет ниже других видов. Вот почему вы не можете видеть, как это становится шире. Попробуйте изменить порядок, чтобы он был добавлен последним, и вы увидите его. Если вы хотите, чтобы другие представления корректировались в соответствии с доступным пространством, вы также можете обновить их кадры, UIStackView может сделать это легко.

Удачи!

...