Swift - 如何确保标签跟随滑块的缩略图?

时间:2015-07-01 07:23:09

标签: ios iphone swift

我需要使用swift开发自定义UISlider。问题是我不知道如何确保标签跟随滑块的缩略图如下:

enter image description here

到目前为止我的代码

import Foundation
import UIKit

class Slider: UISlider {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.layer.borderColor = UIColor.redColor().CGColor
        self.layer.borderWidth = 0.2
        self.tintColor = UIColor.redColor()
    }
}

2 个答案:

答案 0 :(得分:0)

可能值得看看这个方法,这不能直接调用,但你可以在子类化时使用它

func thumbRectForBounds(_ bounds: CGRect,
              trackRect rect: CGRect,
                  value value: Float) -> CGRect

有关此questionhere

的更多信息

答案 1 :(得分:0)

我对音频文件有所了解。 该协议用于在用户更改滑块的值时通知播放器。     func updateSliderPosition(position:Float) 每半秒由玩家调用以改变滑块当前值的位置。

import UIKit

protocol AudioSliderControlDelegate: class
{
    func audioSliderControlDdiChangeValue(sender: AudioSliderControl, value: Float)
}
class AudioSliderControl: UIControl
{
    @IBOutlet weak var slider: UISlider!
    @IBOutlet weak var currentPositionLabel: UILabel!
    @IBOutlet weak var totalDurationLabel: UILabel!

    weak var delegate: AudioSliderControlDelegate?

    private var totalLenght: Double?

    override func awakeFromNib()
    {
        super.awakeFromNib()
        backgroundColor = UIColor.clevooOrange()
        slider.addTarget(self, action: "sliderValueChanged:", forControlEvents: .ValueChanged)
        self.addSeperatorToTop()
    }

    //MARK:
    //MARK: - Setup
    func setupForDuration(duration: Double)
    {
        totalLenght = duration
        currentPositionLabel.text = Double(0).formattedDuration()
        totalDurationLabel.text = (duration + 0.5).formattedDuration()
        slider.setValue(0, animated: false)
    }

    func updateSliderPosition(position: Float)
    {
        self.currentPositionLabel.text = (totalLenght! * Double(position)).formattedDuration()
        self.slider.value = position
    }

    //MARK:
    //MARK: - Notification

    func sliderValueChanged(slider: UISlider)
    {
        self.currentPositionLabel.text = (totalLenght! * Double(slider.value)).formattedDuration()
        delegate?.audioSliderControlDdiChangeValue(self, value: slider.value)
    }
}