2013-03-15 12 views
6

Sto provando a creare un UISlider con una traccia grossa. Ho provato this e funziona quasi. Tuttavia, quando viene visualizzato per la prima volta UISlider, la barra della traccia è normale. Solo quando riceve un evento tattile diventa più denso.Come rendere UISlider più spesso quando viene visualizzato per la prima volta?

Ecco il codice ho aggiunto al mio sottoclasse di UISlider, come raccomandato:

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

Non capisco come funziona, quindi non riesco a capire il motivo per cui non funziona perfettamente. Ecco le mie domande:

  1. Come funziona?
  2. Come posso controllare quanto spesso rende la traccia?
  3. Come posso influire sulla traccia quando viene disegnato per la prima volta UISlider?

Naturalmente, la terza domanda è la più importante, anche se le altre mi aiuteranno nella mia comprensione.

Un'altra cosa da considerare: quando viene visualizzato per primo, mi nascondo il pollice:

[slider setThumbImage:[[UIImage alloc] init] forState:UIControlStateNormal]; 

Quando l'utente tocca il dispositivo di scorrimento, visualizzo il pollice in questo modo:

[slider setThumbImage:nil forState:UIControlStateNormal]; 

I menzionalo perché mi chiedo se questo in qualche modo interferisca con la magia trackRectForBounds.

Grazie!

risposta

4

Domanda 1. Da the docs:

Se si desidera personalizzare il rettangolo traccia, è possibile eseguire l'override di questo metodo e restituire un rettangolo diverso. Il rettangolo restituito è utilizzato per ridimensionare la traccia e le immagini del pollice durante il disegno.

L'implementazione predefinita di questo metodo restituisce un rettangolo più piccolo di quello che viene passato. Il tuo restituisce semplicemente ciò che è passato, invece di rimpicciolirlo per primo.

Domanda 2. Return un CGRect grande o più piccolo, ad esempio:

return CGRectMake(0, 0, 500, 200); 

Domanda 3. Credo che l'unico metodo viene chiamato se non si imposta un'immagine personalizzata, che è perché non ha effetto finché non si imposta l'immagine su nil. Se si desidera sostituire l'immagine, provare a sostituire le immagini del cursore con immagini reali che sembrano come si desidera.

+2

Bellissime - ottime risposte. Non sai come hai saputo della "implementazione di default" nella domanda 1, ma questo spiega tutto - grazie! – Bob

+0

Tipica risposta stackoverflow. – benjaminhallock

+0

@benjaminhallock Cosa c'è di sbagliato nella mia risposta? –

Problemi correlati