2013-03-15 12 views
6

Próbuję zrobić UISlider, który ma grubą ścieżkę. Próbowałem this, a to prawie działa. Jednakże, gdy pierwszy raz wyświetli się UISlider, pasek śledzenia jest normalny. Tylko wtedy, gdy dostaje się wydarzenie dotykowe, staje się coraz grubsze.Jak sprawić, aby UISlider był grubszy po pierwszym wyświetleniu?

Oto kod dodałem do mojego podklasy UISlider, zgodnie z zaleceniami:

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

ja nie rozumiem, jak to działa, więc nie mogę zrozumieć, dlaczego to nie działa idealnie. Oto moje pytania:

  1. Jak to działa?
  2. Jak kontrolować grubość ścieżki?
  3. W jaki sposób mogę wpłynąć na ścieżkę po pierwszym losowaniu UISlider?

Oczywiście trzecie pytanie jest najważniejsze, ale inne pomogą mi w moim zrozumieniu.

Jedną rzeczą do rozważenia: gdy jest wyświetlany jako pierwszy, chowam kciuka:

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

Gdy użytkownik dotyka suwak, wyświetlać kciuk tak:

[slider setThumbImage:nil forState:UIControlStateNormal]; 

I wspomnij o tym, ponieważ zastanawiam się, czy to w jakiś sposób przeszkadza magii trackRectForBounds.

Dzięki!

Odpowiedz

4

Pytanie 1. Od the docs:

Jeśli chcesz dostosować prostokąt toru, można zastąpić tę metodę i powrócić inny prostokąt. Zwrócony prostokąt to używany do skalowania ścieżki i obrazów kciuka podczas rysowania.

Domyślna implementacja tej metody zwraca mniejszy prostokąt niż ten, który został przekazany. Po prostu zwraca to, co zostało przekazane, zamiast najpierw zmniejszyć.

Pytanie 2. Powrót większy lub mniejszy CGRect, na przykład:

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

Pytanie 3. Myślę, że metoda jest wywoływana tylko jeśli nie ustawić niestandardowy obraz, który jest dlaczego nie działa, dopóki nie ustawisz obrazu na nil. Jeśli chcesz przesłonić obraz, spróbuj przesłonić obrazy suwaka rzeczywistymi obrazami, które wyglądają tak, jak chcesz.

+2

Piękne - świetne odpowiedzi. Nie wiem, skąd wiedziałeś o "domyślnej implementacji" w pytaniu 1, ale to wszystko wyjaśnia - dzięki! – Bob

+0

Typowa odpowiedź przepływu stackoverflow. – benjaminhallock

+0

@benjaminhallock Co jest nie tak z moją odpowiedzią? –

Powiązane problemy