gpt4 book ai didi

objective-c - 如何向 XCode 6 中的 UISlider 添加渐变色?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:51 24 4
gpt4 key购买 nike

我正在开发一个设计应用程序,其中有一个部分用于通过 RGB 的三个 slider 选择颜色。正如我们在 xcode 中看到的那样,我们希望通过 RGB 值选择颜色, slider 色调颜色是一种渐变颜色,当我们改变 slider 时它会发生变化。我想在我的应用程序中使用它。但我不知道该怎么做?

我在博客中找到了这段代码。但对我不起作用。

- (void)setGradientToSlider:(UISlider *)Slider WithColors:(NSArray *)Colors{

UIView * view = (UIView *)[[Slider subviews]objectAtIndex:0];

UIImageView * maxTrackImageView = (UIImageView *)[[view subviews]objectAtIndex:0];

CAGradientLayer * maxTrackGradient = [CAGradientLayer layer];
CGRect rect = maxTrackImageView.frame;
rect.origin.x = view.frame.origin.x;

maxTrackGradient.frame = rect;
maxTrackGradient.colors = Colors;

[maxTrackGradient setStartPoint:CGPointMake(0.0, 0.5)];
[maxTrackGradient setEndPoint:CGPointMake(1.0, 0.5)];

[[maxTrackImageView layer] insertSublayer:maxTrackGradient atIndex:0];

/////////////////////////////////////////////////////

UIImageView * minTrackImageView = (UIImageView *)[[view subviews]objectAtIndex:1];

CAGradientLayer * minTrackGradient = [CAGradientLayer layer];
rect = minTrackImageView.frame;
rect.size.width = maxTrackImageView.frame.size.width;
rect.origin.x = 0;
rect.origin.y = 0;

minTrackGradient.frame = rect;
minTrackGradient.colors = Colors;

[minTrackGradient setStartPoint:CGPointMake(0.0, 0.5)];
[minTrackGradient setEndPoint:CGPointMake(1.0, 0.5)];

[minTrackImageView.layer insertSublayer:minTrackGradient atIndex:0];

}

如果有任何帮助,我将不胜感激。谢谢。

最佳答案

虽然它没有给我想要的结果,但对于那些想要尝试它的人来说,这里是上面答案的一个简单而肮脏的 Swift 版本。

func setSlider(slider:UISlider) {

let tgl = CAGradientLayer()
let frame = CGRectMake(0, 0, slider.frame.size.width, 5)
tgl.frame = frame
tgl.colors = [UIColor.blueColor().CGColor, UIColor.greenColor().CGColor, UIColor.yellowColor().CGColor, UIColor.orangeColor().CGColor, UIColor.redColor().CGColor]
tgl.startPoint = CGPointMake(0.0, 0.5)
tgl.endPoint = CGPointMake(1.0, 0.5)

UIGraphicsBeginImageContextWithOptions(tgl.frame.size, tgl.opaque, 0.0);
tgl.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

image.resizableImageWithCapInsets(UIEdgeInsetsZero)

slider.setMinimumTrackImage(image, forState: .Normal)
//slider.setMaximumTrackImage(image, forState: .Normal)

}

Swift 4.0 更新

func setSlider(slider:UISlider) {
let tgl = CAGradientLayer()
let frame = CGRect.init(x:0, y:0, width:slider.frame.size.width, height:5)
tgl.frame = frame
tgl.colors = [UIColor.blue.cgColor, UIColor.green.cgColor, UIColor.yellow.cgColor, UIColor.orange.cgColor, UIColor.red.cgColor]
tgl.startPoint = CGPoint.init(x:0.0, y:0.5)
tgl.endPoint = CGPoint.init(x:1.0, y:0.5)

UIGraphicsBeginImageContextWithOptions(tgl.frame.size, tgl.isOpaque, 0.0);
tgl.render(in: UIGraphicsGetCurrentContext()!)
if let image = UIGraphicsGetImageFromCurrentImageContext() {
UIGraphicsEndImageContext()

image.resizableImage(withCapInsets: UIEdgeInsets.zero)

slider.setMinimumTrackImage(image, for: .normal)
}
}

关于objective-c - 如何向 XCode 6 中的 UISlider 添加渐变色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27967513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com