【问题标题】:How do I set UISlider to have only one track image rather than using a minimum track image and a maximum track image in Swift?如何将 UISlider 设置为只有一个轨道图像,而不是在 Swift 中使用最小轨道图像和最大轨道图像?
【发布时间】:2017-04-11 22:20:56
【问题描述】:

您好,我想知道如何为我的自定义滑块设置一个轨道图像。我有一个问题,如果我使用相同的图像设置最小轨道图像和最大轨道图像,我的滑块在拇指图像中有一个间隙,例如这张图片。

这是我的自定义类 UISlider 代码。

  import UIKit

class NightVisionSlider: UISlider {

   required init?(coder: NSCoder) {
        super.init(coder:coder)



      self.setThumbImage(UIImage(named:"Night Vision Slider Knob3.png")!, for:.normal)

        let trackingImage = UIImage(named:"Night Vision Bar 2.png")!

      self.setMinimumTrackImage(trackingImage, for:.normal)

       self.setMaximumTrackImage(trackingImage, for:.normal)

    }


}

我怎样才能只有一张完整的跟踪图像,所以我的滑块没有这个缺陷?

【问题讨论】:

  • 我不认为你几乎没有创建你自己的滑块。如果我是你,在这样做之前,重新考虑你的拇指图像。否则,我认为您需要对滑块的关键内容进行子类化,然后使用单个轨道构建您自己的。 “这不是缺陷 [bug],而是一个特性。”
  • 非常感谢@dfd 澄清这个问题。我刚刚找到解决此问题的方法是在滑块后面创建跟踪图像的 imageView,然后将条形/跟踪部分的 alpha 设置为 0。您认为这是一个好方法还是应该尝试创建我的自己的滑块?
  • 我说如果它有效,就去做。我想区分“创建”和“子类化”(从我之前的评论)。由于子类仍然涉及最大/最小轨道,我想您可能需要创建一个滑块,包括您需要的所有视图和属性。我建议,如果您有这种样式滑块与 UIImageView 一起使用,并且您可以在其他地方重用它,请考虑将其子类化(作为 NightVisionSlider?)并将图像添加到子类中。您甚至可以为该图像和拇指图像添加属性,使整个事物 IBInspectable 并分发它。
  • 那时我需要更多关于 UIDesign 和子类化的研究。非常感谢您的帮助,您帮助我解决了这个问题。

标签: swift image interface uislider


【解决方案1】:
class CustomSlider: UISlider
{

    override func awakeFromNib()
    {
       super.awakeFromNib()
       self.setThumbImage(UIImage(named:"Night Vision Slider Knob3.png")!, for:.normal)

       let trackingImage = UIImage(named:"Night Vision Bar 2.png")!

       self.setMinimumTrackImage(trackingImage, for:.normal)

       self.setMaximumTrackImage(trackingImage, for:.normal)

    }
    override func layoutSubviews()
    {
        super.layoutSubviews()
        super.layer.cornerRadius = self.frame.height/2  //Do something additional if you want to do!.
    }

    override func trackRect(forBounds bounds: CGRect) -> CGRect
    {
        var newBounds = super.trackRect(forBounds: bounds)
        newBounds.size.height = 10 //Size of your track 
        return newBounds
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多