Jak ustawić suwak w pozycji kliknięcia i uzyskać wartość suwaka w klikniętej lokalizacji na UISlider w programowaniu iPhone'a. Wiem, że możemy przeciągnąć suwak do tej pozycji, ale nie chcę tego robić. Czy możesz mi powiedzieć, jak ustawić suwak w pozycji kliknięcia? Czy to się da zrobić?iPhone: Programowanie UISlider do położenia w klikniętej lokalizacji
Odpowiedz
Możesz po prostu dodać UITapGestureRecognizer do suwaka, a następnie wyciągnąć UIEvent i dotknięcia związane z nim, aby dowiedzieć się, gdzie wzdłuż UISlider kran miał miejsce. Następnie ustaw wartość suwaka na tę wyliczoną wartość.
UPDATE:
pierwsze, konfiguracja Twój suwak i dodać rozpoznawania gestów do niego.
UISlider *slider = [[[UISlider alloc] init] autorelease];
…
<slider setup>
…
UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)] autorelease];
[slider addGestureRecognizer:gr];
Następnie realizacji selektor
- (void)sliderTapped:(UIGestureRecognizer *)gestureRecognizer {
<left as a user excercise*>
}
* Podpowiedź: Read the docs aby dowiedzieć się, jak uzyskać locationInView ekstrapolować i dowiedzieć się, co suwak powinien być
Oto część „lewo ćwiczenie użytkownika ":
- (void) tapped: (UITapGestureRecognizer*) g {
UISlider* s = (UISlider*)g.view;
if (s.highlighted)
return; // tap on thumb, let slider deal with it
CGPoint pt = [g locationInView: s];
CGFloat percentage = pt.x/s.bounds.size.width;
CGFloat delta = percentage * (s.maximumValue - s.minimumValue);
CGFloat value = s.minimumValue + delta;
[s setValue:value animated:YES];
}
Sposób w jaki zrobiłem to podklasy suwak i sprawdź w touchesBegan
. Jeśli użytkownik kliknie obszar przycisku kciukiem (co śledzenie), a następnie ignorować kran, ale gdziekolwiek indziej na potencjometr robimy: :
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
// if we didn't tap on the thumb button then we set the value based on tap location
if (!CGRectContainsPoint(lastKnownThumbRect, touchLocation)) {
self.value = self.minimumValue + (self.maximumValue - self.minimumValue) * (touchLocation.x/self.frame.size.width);
}
[super touchesBegan:touches withEvent:event];
}
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
CGRect thumbRect = [super thumbRectForBounds:bounds trackRect:rect value:value];
lastKnownThumbRect = thumbRect;
return thumbRect;
}
najlepsze najlepsze rozwiązanie –
jeśli użyłeś niestandardowego "setThumbImage", użyj 'self.value = self.minimumValue + (self.maximumValue - self.minimumValue) * ((touchLocation.x - self.currentThumbImage.size.width/2)/(self.frame.size.width-self.currentThumbImage.size.width)); 'in -touchesBegan. – SwiftArchitect
używałem podklasy kod UISlider słuchać zdarzeń valueChanged w ios6> w celu zaimplementowania funkcji typu "przyciągnij do siatki".
Ten błąd został uszkodzony podczas aktualizacji do iOS7, ponieważ nie uruchamiał już UIControlEventsValueChanged. Dla każdego, mającego ten sam problem jest ona ustalana przez dodanie odpowiedniego wiersza w if() jak poniżej:
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
// if we didn't tap on the thumb button then we set the value based on tap location
if (!CGRectContainsPoint(lastKnownThumbRect, touchLocation)) {
self.value = self.minimumValue + (self.maximumValue - self.minimumValue) * (touchLocation.x/self.frame.size.width);
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
[super touchesBegan:touches withEvent:event];
}
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
CGRect thumbRect = [super thumbRectForBounds:bounds trackRect:rect value:value];
lastKnownThumbRect = thumbRect;
return thumbRect;
}
Mam nadzieję, że ktoś pomaga :)
Użyłem tego kodu. Uzyskaj od: http://imagineric.ericd.net/2012/11/15/uislider-touch-to-set-value/
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)];
[slider addGestureRecognizer:gr];
- (void)sliderTapped:(UIGestureRecognizer *)g {
UISlider* s = (UISlider*)g.view;
if (s.highlighted)
return; // tap on thumb, let slider deal with it
CGPoint pt = [g locationInView: s];
CGFloat percentage = pt.x/s.bounds.size.width;
CGFloat delta = percentage * (s.maximumValue - s.minimumValue);
CGFloat value = s.minimumValue + delta;
[s setValue:value animated:YES];
}
Mam nadzieję, że to ci pomoże.
Wygląda na to, że właśnie podklasy UISlider i powrót zawsze prawdziwe do beginTracking dają pożądany efekt.
iOS 10 i Swift 3
class CustomSlider: UISlider {
override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
return true
}
}
- 1. Obserwowanie wartości UISlider - iPhone KVO
- 2. iPhone UISlider z dwoma kciukami/wskaźnikami?
- 3. programowanie aplikacji scala na iPhone?
- 4. UISlider w różnych kolorach
- 5. klienta UISlider
- 6. iPhone: domyślny plik ustawień lokalizacji/internacjonalizacji
- 7. iPhone GPS - nie otrzymuje poprawnych aktualizacji lokalizacji
- 8. Uzyskiwanie położenia ze współrzędnych
- 9. Zmienianie położenia pliku index.html w wyjściu Doxygen
- 10. jak ustawić UISlider w pionie?
- 11. iOS: Uzyskaj kąt do położenia geograficznego z bieżącej lokalizacji bez mapy
- 12. Określanie położenia płótna w Swing
- 13. Animacja UISlider płynnie
- 14. Dostosowywanie położenia okna dialogowego FB.ui()
- 15. Zmiana położenia początkowego okna WPF
- 16. Programowanie równoległe w C#
- 17. Jak zmienić UISlider na pionowy?
- 18. iOS CGPDFScanner do wyszukiwania lokalizacji pozycji tekstowych
- 19. UISlider w widoku Dzisiaj Rozszerzenie (Widget)
- 20. Programowanie uniwersalnej aplikacji w iOS
- 21. Identyfikacja lokalizacji geograficznych w tekście
- 22. UISlider nie animuje się w iOS7
- 23. wstawić element do określonego położenia wektora
- 24. jak dostać iterator do konkretnego położenia wektora
- 25. Event tworzenia komponentu Visual Studio - Kopiuj do względnego położenia katalogu
- 26. Jak utworzyć iPoda-esque UISlider
- 27. Dostosuj UISlider (wysokość obrazu ścieżki)
- 28. Programowe pobieranie położenia pliku dziennika IIS w aplikacji ASP.NET
- 29. Określanie położenia geograficznego według arbitralnej treści tekstu
- 30. ustawienie canShowCallOut = NIE dla adnotacji o obecnej lokalizacji, iPhone
można z grubsza obraz tego, jak wprowadzić UITapGestureRecognizer na suwak? – suse