如何增加 UISlider 的最大轨道的大小?

Posted

技术标签:

【中文标题】如何增加 UISlider 的最大轨道的大小?【英文标题】:How to increase the size of the max track of a UISlider? 【发布时间】:2014-08-10 15:51:44 【问题描述】:

我想添加一个尺寸从最小值到最大值不同的 UISlider。 这是我需要的示例:

我尝试过使用一些方法,例如:

- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds;
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds;
- (CGRect)trackRectForBounds:(CGRect)bounds;
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value;

但我无法让它工作...... 关于您如何实现这一目标的任何建议或链接?

【问题讨论】:

trackRectForBounds 就是这样。你为什么不给我们看一些代码? 没有什么能正常工作,我认为它不会有帮助... 【参考方案1】:

你需要继承 UISlider。如果您在运行时创建 UISlider,则应使用 initWithFrame 否则使用 initWithCoder

@implementation slider

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        // Initialization code
    
    return self;


- (instancetype)initWithCoder:(NSCoder *)coder

    self = [super initWithCoder:coder];
    if (self) 
        // At certain point images swap, that is why you need images fit to your UISlider size.
        UIImage *sliderLeftImg = [[UIImage imageNamed: @"slider2"] stretchableImageWithLeftCapWidth: 10 topCapHeight: 0];
        UIImage *sliderRightImg = [[UIImage imageNamed: @"slider"] stretchableImageWithLeftCapWidth: 10 topCapHeight: 0];
        [self setMinimumTrackImage: sliderLeftImg forState: UIControlStateNormal];
        [self setMaximumTrackImage: sliderRightImg forState: UIControlStateNormal];

    
    return self;


/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect

    // Drawing code

*/

@end

我绘制的示例图像草率,您需要更好的。

UISlider Class Reference

最终结果:

【讨论】:

天哪,不可能这么简单......你的图像“slider”和“slider2”是什么样的?是不是上面这两个最终结果? @kl94 两张图片(滑块和滑块2)都附加到帖子中。 我认为 stretchableImageWithLeftCapWidth 行不通。谢谢。 可以肯定的是,您知道为什么它不适用于 IB 吗? (不使用 stretchableImageWithLeftCapWidth: 的事件)。设置 -[setMinimumTrackImage:] 和 -[setMaximumTrackImage:] “以编程方式”完成了这项工作。但在 IB 上,它似乎不起作用。你有什么想法吗? 我创建了 UISlider 的子类,添加了我在帖子中编写的代码,然后将 UISlider 放在 UIViewController 上,然后在 IB / Identity Inspector / Custom class / Class 上选择它并输入我的自定义那里的班级名称。就是这样。

以上是关于如何增加 UISlider 的最大轨道的大小?的主要内容,如果未能解决你的问题,请参考以下文章

当滑块按钮超过最大值的 60% 时,UISlider 最大轨道图像使用最小轨道图像

UISlider 最小和最大轨道色调清除颜色 iOS 7.1 错误

UISlider - 将线条/图像绘制到轨道(条形图)

具有清晰背景的 UISlider 拇指图像在其后面显示轨道

UISlider 自定义轨道图像未正确设置

Swift UISlider多种轨道颜色[重复]