自定义 UISlider(跟踪图像高度)

Posted

技术标签:

【中文标题】自定义 UISlider(跟踪图像高度)【英文标题】:Customize UISlider (track image height) 【发布时间】:2011-11-04 22:36:34 【问题描述】:

我正在自定义 UISlider。我可以设置一个高于通常拇指的自定义拇指图像,但是在设置更高的最小轨道图像时我无法使轨道更高,但轨道高度保持不变。 应该有可能,因为在 iPad 上的 iPod/Music App 中,音量滑块也比通常的滑块更高,您可以在此处看到:

(来源:cocoia.com)

【问题讨论】:

【参考方案1】:

您需要将滑块子类化并覆盖trackRectForBounds: 方法,如下所示:

- (CGRect)trackRectForBounds:(CGRect)bounds

    return bounds;

【讨论】:

【参考方案2】:

Swift 最简单的解决方案:

class TBSlider: UISlider 

    override func trackRectForBounds(bounds: CGRect) -> CGRect 
        return CGRectMake(0, 0, bounds.size.width, 4)
    

【讨论】:

【参考方案3】:

对于那些希望看到一些更改轨道大小的工作代码的人。

class CustomUISlider : UISlider
        
    override func trackRectForBounds(bounds: CGRect) -> CGRect 
        //keeps original origin and width, changes height, you get the idea
        let customBounds = CGRect(origin: bounds.origin, size: CGSize(width: bounds.size.width, height: 5.0))
        super.trackRectForBounds(customBounds)
        return customBounds
    

    //while we are here, why not change the image here as well? (bonus material)
    override func awakeFromNib() 
        self.setThumbImage(UIImage(named: "customThumb"), forState: .Normal)
        super.awakeFromNib()
    

唯一剩下的就是改变故事板中的类:

您可以继续使用您的搜索栏操作和出口到对象类型 UISlider,除非您想向滑块添加更多自定义内容。

【讨论】:

【参考方案4】:

使用下一个方法setThumbImagesetMinimumTrackImagesetMaximumTrackImage

[self setThumbImage:[UIImage imageNamed:@"switchThumb.png"] forState:UIControlStateNormal];
    [self setMinimumTrackImage:[UIImage imageNamed:@"switchBlueBg.png"] forState:UIControlStateNormal];
    [self setMaximumTrackImage:[UIImage imageNamed:@"switchOffPlain.png"] forState:UIControlStateNormal];

并像这样创建子类

- (id) initWithFrame: (CGRect)rect
    if ((self=[super initWithFrame:CGRectMake(rect.origin.x,rect.origin.y,90,27)]))
        [self awakeFromNib];
    
    return self;

【讨论】:

奇怪,可能我不明白你想要什么? 再一次,在这里不起作用。我猜提供的代码只是ios5? (我用的是iOS4,有一些UISlider只有iOS5)【参考方案5】:
//use this code

 UIImage *volumeLeftTrackImage = [[UIImage imageNamed: @"video_payer_scroll_selection.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
        UIImage *volumeRightTrackImage= [[UIImage imageNamed: @"video_bar_bg.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
        [volumeslider setMinimumTrackImage: volumeLeftTrackImage  forState: UIControlStateNormal];
        [volumeslider setMaximumTrackImage: volumeRightTrackImage  forState: UIControlStateNormal];
        [volumeslider setThumbImage:[UIImage imageNamed:@"sound_bar_btn.png"] forState:UIControlStateNormal];
        [tempview addSubview:volumeslider];

【讨论】:

以上是关于自定义 UISlider(跟踪图像高度)的主要内容,如果未能解决你的问题,请参考以下文章

为自定义 UISlider 旋钮图像添加阴影?

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

自定义 UISlider 图像卡住

自定义 UISlider 图像无法正常工作

具有居中 UISlider 和两个图像的自定义 UITableViewCell

自定义 UISlider(无需编写自定义代码)