UISlider如何变成方形而不是圆角的

5
为什么会这样?我该如何更改?是否有办法更改滑块,使进度滑块不是圆形而是方形?

http://imgur.com/F9Ye24v

我希望它是正方形的,代码只是普通的UI滑块实现。我只编辑了

override func trackRectForBounds(bounds: CGRect) -> CGRect {
    return CGRectMake(0, 0, self.frame.width, 25)
}

使该栏变高
3个回答

9
你可以设置最小和最大轨道图像。只需使用一个宽度为1像素,高度为25像素的图像(矩形无圆角)。
示例: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISlider_Class/#//apple_ref/doc/uid/TP40006798-CH3-SW21
slider.setMinimumTrackImage(UIImage(named: "back"), forState: UIControlState.Normal)
slider.setMaximumTrackImage(UIImage(named: "back"), forState: UIControlState.Normal)

`back`图片只是一个大小为25px的蓝色正方形图像。
`Slider`图片如下: Slider `back`图片如下(只需复制粘贴即可): enter image description here

像创建一个UIView?并将其设置为跟踪图像? - Maxwell Bo Blessen
如果您想要一个双色进度条,例如一侧是一种颜色,而另一侧是另一种颜色,那么您只需将不同的颜色分配给相应的视图即可。 - Maxwell Bo Blessen
这给了我这个结果http://imgur.com/00LheJb最小的图像已经设置好了,我希望进度条的最大边也是一个正方形。 let minImage = UIImage(named: "minTrackImage") let maxImage = UIImage(named: "maxTrackImage") scoreSlider.setMinimumTrackImage(minImage, forState: UIControlState.Normal) scoreSlider.setMaximumTrackImage(maxImage, forState: UIControlState.Normal) - Maxwell Bo Blessen
请使用我在更新的答案中提供的“返回”图像。这只是我为了实现一个没有圆角的滑块所做的操作。 - charlyatwork

4
slider.setMaximumTrackImage(UIImage.imageWith(color: .yellow), for: .normal)
slider.setMinimumTrackImage(UIImage.imageWith(color: .cyan), for: .normal)

UIImage扩展:

static func imageWith(color: UIColor, size: CGSize? = nil) -> UIImage? {
    let rect = CGRect(x: 0, y: 0, width: size?.width ?? 1, height: size?.height ?? 1)
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()
    context?.setFillColor(color.cgColor)
    context?.fill(rect)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

你应该也提供 UIImage(color:) 方法。 - thedp

1
简单。
slider.setMinimumTrackImage(getImageWithColor(color: .blue, size: slider.frame.size), for: .normal)

func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
    let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(rect)
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接