Mam dwa zagnieżdżone widoki UIScrollView: rodzic ograniczony do stronicowania poziomego i dziecko jest ograniczone do przewijania w pionie. Treść to jeden duży widok, który można swobodnie przeciągać, ale przyciąga do jednej z trzech sekcji poziomych. Domyślne zachowanie zagnieżdżonych widoków przewijania pozwala tylko na przewijanie w jednym kierunku na raz, ale chciałem pozwolić na równoczesne przeciąganie w obu kierunkach, aby utrzymać wrażenie manipulowania pojedynczym dużym widokiem.Zagnieżdżone jednoczesne przewijanie UIScrollViews
Moje obecne rozwiązanie zaangażowany izolowanie gestu przewijania pionowego widoku danych oraz ustawienie jego delegata do mojego kontrolera widoku:
for (UIGestureRecognizer *gesture in scrollView.gestureRecognizers)
if ([gesture isKindOfClass:[UIPanGestureRecognizer class]])
gesture.delegate = self;
Potem wdrożył metodę delegata, aby umożliwić gesty widoku stronicowania rozpoznawać równocześnie z pan gest widoku przewijania:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer.view == scrollView && otherGestureRecognizer.view == pageView)
return YES; // allow simultaneous scrolling of pageView and scrollView
return NO;
}
rozwiązanie to przeważnie działa, ale od czasu do czasu będzie działać glitchy kiedy przeciągnij widok dookoła, szczególnie kiedy przenieść się szybko za pomocą myszki lub przeciągnąć go wokół przeszłości granice widoku. W szczególności jeden z widoków przewijania tymczasowo przeskakuje z powrotem do miejsca, w którym się rozpoczął, tak jakby ten gest został anulowany, ale potem odskoczy, jeśli dalej będę przewijać.
Chcę wiedzieć, czy istnieje prostsza lub bardziej niezawodna metoda przewijania w taki sposób, jaki przeoczyłem, lub czy jest coś, co mogę zrobić, aby wyeliminować uciążliwe zachowanie.
Zrobiłem coś podobnego, jak sądzę, i działa idealnie. Czy próbujesz w zasadzie mieć duży obszar do przewijania, który ma stale górny i lewy obszar informujący użytkownika, gdzie są? – Rudiger
Niezupełnie; to, co wyświetlam, to trzy drzewa talentów dla klasy w grze MMO. Zamiast traktować każde drzewo jako niezależną stronę, chciałem pozwolić swobodnie przeciągać widok dookoła, ale mam to zablokować do jednego z drzew po zwolnieniu przeciągnięcia.Widziałem inne aplikacje, które używają podobnych zachowań, a konkretnie aplikację WoW Armory, która wyświetla drzewa talentów dla tej gry. – trevorsm
Ach, rozumiem, trochę później, jeśli pomyślę o czymś w rodzaju "NSInvalidArgumentException" – Rudiger