Domanda

Il mio obiettivo è quello di creare un UISlider più grande con un'altezza di 35 pixel per l'immagine del pollice.

Ho sottoclassato UISlider e ho aggiunto il metodo:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50);
}

Quindi ho impostato l'immagine thum dal mio controller usando setThumbImage:

Il mio pollice più grande è ben mostrato.

Il problema che ho è che la zona di tracciamento è sempre la stessa di circa 19 px di altezza, come estenderla a 50?

Grazie

T.

È stato utile?

Soluzione

Credo che potresti voler guardare thumbRectForBounds:trackRect:value:

Altri suggerimenti

Un problema di vecchia data con il controllo UISlider del sistema operativo iPhone è che non puoi renderlo più alto. Più specificamente, puoi renderlo più alto specificando immagini più alte per il pollice e la traccia, ma l'area del tocco rimane alta fino a 23 pixel.

Michael Patricios ha pubblicato un modo per rendere i cursori predefiniti molto più facili da toccare e una variante di tale tecnica può gestire cursori più grandi. Quello che devi fare è sottoclassare UISlider e sovrascrivere pointInside nella tua classe:

// How many extra touchable pixels you want above and below the 23px slider
#define SIZE_EXTENSION_Y 10

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
    CGRect bounds = self.bounds;
    bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y);
    return CGRectContainsPoint(bounds, point);
}

In Interface Builder, imposta il dispositivo di scorrimento per utilizzare la tua nuova sottoclasse UISlider e ora hai un dispositivo di scorrimento con un'altezza tangibile di 43px.

Sto usando questa soluzione :)

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];

Aumenta l'area colpita dal pollice di UISlider aumentando l'altezza del frame UISlider. Questo approccio evita qualsiasi offset e la conseguente necessità di correggere il frame del dispositivo di scorrimento.

- (void)viewDidLoad{
    [super viewDidLoad];

    //expand slider hit area
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10);

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top