2015-07-01 5 views
1

Мне нужно разработать пользовательский UISlider, используя swift. Проблема заключается в том, я не знаю, как сделать верный ярлык следующий эскиз слайдера, как следующие ниже:Swift - Как убедиться, что этикетка соответствует миниатюре слайдера?

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() 
    } 
} 
+0

возможно дубликат [UILabel Over UISlider Thumb] (http://stackoverflow.com/questions/3510961/uilabel-over-uislider-thumb) –

+0

Вы не можете использовать этот метод, если вы используете Авто Макет, так что ответ не распространяется на все случаи. –

+0

@CihanTek вы не можете использовать автоматическую компоновку с UISlider, чтобы она применима ко всем случаям. –

ответ

0

Вероятно, стоит взглянуть на этот метод , это не может быть вызван непосредственно, но вы можете использовать его в то время как подклассы

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

Более подробную информацию также на этом question и here

+0

Я попробую сначала сэр. –

0

У меня была точная вещь для аудиофайлов. Протокол используется для информирования игрока, когда пользователь меняет значение ползунка. func updateSliderPosition (позиция: 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) 
    } 
} 
+0

Я попробую сначала. –