更改iPhone UISlider条形图

Fog*_*ter 31 iphone image objective-c uislider ios

UISlider在我的应用程序中使用了一个,但我想使用自定义的"外观和感觉".我已经将拇指改为我自己的形象,但有没有办法改变吧?我有一个我想使用的条形图,但看不到如何做到这一点.

我已经找到了如何更改最大和最小图像而不是条形本身.

Cos*_*que 60

你是正确的使用-setMinimumTrackImage:forState:-setMaximumTrackImage:forState:方法.你错过的是你应该为UIImage他们提供可伸缩的,剩下的就是自动照顾:

UIImage *sliderLeftTrackImage = [[UIImage imageNamed: @"SliderMin.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
UIImage *sliderRightTrackImage = [[UIImage imageNamed: @"SliderMax.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
[mySlider setMinimumTrackImage: sliderLeftTrackImage forState: UIControlStateNormal];
[mySlider setMaximumTrackImage: sliderRightTrackImage forState: UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

您可以对最小和最大部分使用相同的图像.


Ste*_*vin 25

最简单的解决方案是在控件后面渲染UIImage来表示轨道.拇指旋钮可以改为:

[mySlider setThumbImage:[UIImage imageNamed:@"thumb_image.png"] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

这样做的副作用是除非您提供自己的轨道,否则不会渲染轨道.这与UIImage结合使用,可以为您提供自定义UISlider,而无需您进行任何子类化.

  • `[[UISlider appearanceWhenContainedIn:[self class],nil] setThumbImage:[UIImage ...] forState:UIControlStateNormal];`.我想你也可以用'UIControlStateHighlighted`做一个"触地"图像. (4认同)
  • 对于iOS 5中的标准UISliders来说似乎不再是真的,除非我错过了什么. (3认同)

Dor*_*Roy 8

在此处输入图片说明

这是一种添加未拉伸的轨道图像的方法,因此您可以像 OP 要求的那样在背景中使用楔形形状:

斯威夫特 3.0:

let trackImg = image.resizableImage(withCapInsets: .zero, resizingMode: .tile)
slider.setMinimumTrackImage(trackImg, for: .normal)
slider.setMaximumTrackImage(trackImg, for: .normal)
Run Code Online (Sandbox Code Playgroud)

重要提示:确保滑块的宽度与图像的宽度完全相同!


Cam*_*mer 7

以现代的方式将它们放在一起

如果在Storyboard中定义UISlider,则为Slider设置样式的最佳位置是View的子类.在awakeFromNib中,您可以更改按钮,左右轨道.

此调用在iOS 5中已弃用 stretchableImageWithLeftCapWidth:topCapHeight:

- (void)awakeFromNib
{
    [super awakeFromNib];

    UIImage *thumbImage = [UIImage imageNamed:@"slider-button"];
    [self.slider setThumbImage:thumbImage forState:UIControlStateNormal];

    UIImage *sliderLeftTrackImage = [UIImage imageNamed: @"slider-fill"];
    sliderLeftTrackImage = [sliderLeftTrackImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch];
    UIImage *sliderRightTrackImage = [UIImage imageNamed: @"slider-track"];
    sliderRightTrackImage = [sliderRightTrackImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch];
    [self.slider setMinimumTrackImage:sliderLeftTrackImage forState:UIControlStateNormal];
    [self.slider setMaximumTrackImage:sliderRightTrackImage forState:UIControlStateNormal];
}
Run Code Online (Sandbox Code Playgroud)