2011-11-04 7 views
11

Estoy personalizando un UISlider. Podría establecer una imagen de pulgar personalizada que sea más alta que el pulgar habitual, pero no pude hacer que la pista fuera más alta al establecer una imagen de pista mínima más alta, pero la altura de la pista permaneció igual. Debería ser posible que en el/aplicación de música iPod en el IPAD el deslizador de volumen es también mayor cuando el cursor habitual como se puede ver aquí:Personalizar UISlider (seguimiento de la altura de la imagen)

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

Respuesta

2

uso siguientes métodos setThumbImage, setMinimumTrackImage , setMaximumTrackImage

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

y crear subclase como esto

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

esto no funciona – user997128

+0

extraña, tal vez yo no entiendo lo que quiere? – SAKrisT

+0

Una vez más, no funciona aquí. Supongo que el código suministrado es solo iOS5. (Estoy usando iOS4, y hay algunos bits de UISlider que solo son iOS5) – Adam

23

Necesitas subclase el control deslizante y reemplazar el método trackRectForBounds:, así:

- (CGRect)trackRectForBounds:(CGRect)bounds 
{ 
    return bounds; 
} 
1
//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]; 
2

Para aquellos que le gustaría ver algo de código de trabajo para cambiar el tamaño de la pista.

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

único que queda es cambiar la clase dentro del guión gráfico:

storyboardstuff

Puede seguir usando su acción seekbar y la salida a la UISlider tipo de objeto, a menos que usted quiere añadir un poco más personalizada cosas para su control deslizante.

5

La solución más sencilla para Swift:

class TBSlider: UISlider { 

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