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

问题描述:

我正在自定义一个UISlider。我可以设置比通常的拇指更高的自定义拇指图像,但是当设置更高的最小轨道图像时,我无法使轨道更高,但轨道高度保持不变。 应该可以作为的iPod /音乐应用程序在iPad上的音量滑块也更高,因为通常的滑块,你可以在这里看到:自定义UISlider(跟踪图像高度)

http://blog.cocoia.com/wp-content/uploads/2010/01/Lol-wut.png

下次使用方法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; 
} 
+0

这不起作用 – user997128

+0

奇怪,也许我不明白你想要什么? – SAKrisT

+0

再次,在这里不起作用。我猜只是提供的代码是iOS5? (我使用的是iOS4,并且只有iOS5的UISlider) – Adam

您需要继承滑块和覆盖trackRectForBounds:方法,像这样:

- (CGRect)trackRectForBounds:(CGRect)bounds 
{ 
    return bounds; 
} 

//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]; 

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

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() 
    } 
} 

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

storyboardstuff

您可以继续使用搜索条的行动和出口对象类型UISlider,除非你想添加一些更多的自定义东西到你的滑块。

为雨燕最简单的办法:

class TBSlider: UISlider { 

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