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,而无需您进行任何子类化.
这是一种添加未拉伸的轨道图像的方法,因此您可以像 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)
重要提示:确保滑块的宽度与图像的宽度完全相同!
如果在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)