Swift中滑块的动画已损坏

Swift中滑块的动画已损坏,swift,xcode,slider,Swift,Xcode,Slider,如果我给我的滑块初始值(例如slider.value=5),然后我移动它,动画将被破坏,“拇指”似乎在当前位置和值5的位置之间跳跃(但同样,仅当我“滑动”它时)。当我没有给它一个初始位置时,没问题。你遇到过同样/类似的问题吗 我的代码在这里: import UIKit import AVFoundation class Playercontroller: UIViewController { // MARK: - User Interface Properties var

如果我给我的滑块初始值(例如slider.value=5),然后我移动它,动画将被破坏,“拇指”似乎在当前位置和值5的位置之间跳跃(但同样,仅当我“滑动”它时)。当我没有给它一个初始位置时,没问题。你遇到过同样/类似的问题吗

我的代码在这里:

import UIKit
import AVFoundation

class Playercontroller: UIViewController {

    // MARK: - User Interface Properties

    var artworkView = UIImageView(image: #imageLiteral(resourceName: "rivuletInSpring"))
    let infoLabel = UILabel()
    let timeLabel = UILabel()
    let startButton = UIButton(type: .system)
    let stopButton = UIButton(type: .system)
    let slider = UISlider()
    var player: AVAudioPlayer = AVAudioPlayer()
    var timer = Timer()
    var time: Int = 5
    var navigationTitle = "Rivulet in the Spring"
    var soundName = "rivuletInSpringMelody"

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .black
        navigationItem.title = "\(navigationTitle)" // set to a value based on a pressed button

        do
        {
            let audioPath = Bundle.main.path(forResource: "\(soundName)", ofType: "mp3")
            try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL)
        }
        catch
        {
            // finish! probably use a notification
        }

    }

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()

        infoLabel.text = "Duration in mins: "
        infoLabel.textColor = .white
        infoLabel.font = UIFont(name: "HelveticaNeue-Bold", size: 25.0)

        timeLabel.text = String(Int(slider.value))
        timeLabel.textColor = .white
        timeLabel.font = UIFont(name: "HelveticaNeue-Bold", size: 25.0)

        slider.maximumValue = 60
        slider.minimumValue = 1
        //slider.value = 5
        slider.addTarget(self, action:#selector(sliderValueChanged), for: .valueChanged)

        startButton.backgroundColor = .black
        startButton.setTitle("Play", for: .normal)
        startButton.tintColor = .orange
        startButton.titleLabel?.font = UIFont(name: "HelveticaNeue-Bold", size: 30.0)
        startButton.layer.borderColor = UIColor.orange.cgColor
        startButton.layer.borderWidth = 1
        startButton.addTarget(self, action: #selector(play), for: .touchUpInside)

        stopButton.backgroundColor = .black
        stopButton.setTitle("Stop", for: .normal)
        stopButton.tintColor = .orange
        stopButton.titleLabel?.font = UIFont(name: "HelveticaNeue-Bold", size: 30.0)
        stopButton.layer.borderColor = UIColor.orange.cgColor
        stopButton.layer.borderWidth = 1
        stopButton.addTarget(self, action: #selector(stop), for: .touchUpInside)

        view.addSubview(artworkView)
        artworkView.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(infoLabel)
        infoLabel.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(timeLabel)
        timeLabel.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(slider)
        slider.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(startButton)
        startButton.translatesAutoresizingMaskIntoConstraints = false

        view.addSubview(stopButton)
        stopButton.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            artworkView.widthAnchor.constraint(equalToConstant: 414),
            artworkView.heightAnchor.constraint(equalTo: artworkView.widthAnchor, multiplier: 170.0/414.0),
            artworkView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: 0.0),
            artworkView.leftAnchor.constraint(equalTo: view.leftAnchor),
            artworkView.rightAnchor.constraint(equalTo: view.rightAnchor),
            infoLabel.topAnchor.constraint(equalTo: artworkView.bottomAnchor, constant: 100.0),
            infoLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: -11.0),
            timeLabel.topAnchor.constraint(equalTo: artworkView.bottomAnchor, constant: 100.0),
            timeLabel.leadingAnchor.constraint(equalTo: infoLabel.trailingAnchor, constant: 7.0),
            slider.topAnchor.constraint(equalTo: infoLabel.bottomAnchor, constant: 30.0),
            slider.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40.0),
            slider.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40.0),
            startButton.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant: -20.0),
            startButton.topAnchor.constraint(equalTo: slider.bottomAnchor, constant: 30.0),
            startButton.widthAnchor.constraint(equalToConstant: 100.0),
            startButton.heightAnchor.constraint(equalToConstant: 50.0),
            stopButton.topAnchor.constraint(equalTo: slider.bottomAnchor, constant: 30.0),
            stopButton.leadingAnchor.constraint(equalTo: view.centerXAnchor, constant: 20),
            stopButton.widthAnchor.constraint(equalToConstant: 100.0),
            stopButton.heightAnchor.constraint(equalToConstant: 50.0),
            ])

    }

    func sliderValueChanged(){
        timeLabel.text = String(Int(slider.value))
    }

}
您正在设置
viewWillLayoutSubviews
中的
滑块的初始值。该函数运行数千次,包括拖动滑块拇指时。如果您想给滑块一个初始值,那么
viewDidLoad
的覆盖内部将是一个更好的选择


事实上,您在
viewWillLayoutSubviews
中的所有代码都应该移动到
viewDidLoad
中,或者移动到
setup
函数中,该函数由
viewDidLoad
调用。您不想在
视图中添加子视图WillLayoutSubviews

包括现场的相关代码,而不是在某些外部站点上。好的,我也尝试过,但当时不起作用,这次也不起作用。然而,这是我第一次在viewDidLoad中设置了最小值和最大值,它成功了!谢谢如果我可以问,为什么向viewDidLoad添加子视图更好?因为viewWillLayoutSubviews运行了数千次?因为我无法再编辑以前的评论,我只想说我已经找到了问题的答案