Chcę, aby funkcja UIScrollView szybko przewijała po szybkim przeciągnięciu, like this. Mimo że stronicowanie jest włączone, scroll działa one page at a time. Czy można przewijać szybko, gdy stronicowanie jest włączone jednym ruchem palca bez ręcznej implementacji za pomocą rozpoznawania gestów?Czułość/szybkość przewijania UIScrollView z funkcją stronicowania
Odpowiedz
Jest to dość proste, jednak musisz sam wdrożyć aspekt stronicowania (co jest dość proste). Nie potrzebujesz rozpoznawania gestów.
Swift
Po pierwsze, dostosować UIScrollView stopy opóźnienia:
scrollView.decelerationRate = UIScrollViewDecelerationRateFast
że mamy tablicę treści - nazwijmy to yourPagesArray
. W swojej UIScrollViewDelegate, wdrożyć następujące metody:
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
{
//This is the index of the "page" that we will be landing at
let nearestIndex = Int(CGFloat(targetContentOffset.pointee.x)/scrollView.bounds.size.width + 0.5)
//Just to make sure we don't scroll past your content
let clampedIndex = max(min(nearestIndex, yourPagesArray.count - 1), 0)
//This is the actual x position in the scroll view
var xOffset = CGFloat(clampedIndex) * scrollView.bounds.size.width
//I've found that scroll views will "stick" unless this is done
xOffset = xOffset == 0.0 ? 1.0 : xOffset
//Tell the scroll view to land on our page
targetContentOffset.pointee.x = xOffset
}
Potrzebny będzie również wdrożyć następujące metody delegata, aby obsłużyć przypadek, gdy użytkownik podnosi ich palcem delikatnie, nie powodując żadnych przewijania opóźnienia:
(Aktualizacja:.. może nie trzeba robić tego pod najnowszym iOS SDK wydaje się, że powyższa metoda delegat nazywa się teraz, kiedy nie jest zerowa prędkość)
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
{
if !decelerate
{
let currentIndex = floor(scrollView.contentOffset.x/scrollView.bounds.size.width)
let offset = CGPoint(x: scrollView.bounds.size.width * currentIndex, y: 0)
scrollView.setContentOffset(offset, animated: true)
}
}
Objective-C
Ustawianie szybkości opóźnienia:
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
Wtedy twój widok przewijania realizacja delegat:
- (void) scrollViewWillEndDragging:(UIScrollView *)scroll withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
//This is the index of the "page" that we will be landing at
NSUInteger nearestIndex = (NSUInteger)(targetContentOffset->x/scrollView.bounds.size.width + 0.5f);
//Just to make sure we don't scroll past your content
nearestIndex = MAX(MIN(nearestIndex, yourPagesArray.count - 1), 0);
//This is the actual x position in the scroll view
CGFloat xOffset = nearestIndex * scrollView.bounds.size.width;
//I've found that scroll views will "stick" unless this is done
xOffset = xOffset==0?1:xOffset;
//Tell the scroll view to land on our page
*targetContentOffset = CGPointMake(xOffset, targetContentOffset->y);
}
- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if(!decelerate)
{
NSUInteger currentIndex = (NSUInteger)(scrollView.contentOffset.x/scrollView.bounds.size.width);
[scrollView setContentOffset:CGPointMake(scrollView.bounds.size.width * currentIndex, 0) animated:YES];
}
}
myślę, że możemy ustawić scrollView.userInteractionEnabled = NIE, gdy nasz palec dotknąć. A potem, gdy animacja się zatrzyma, otwórz ją. To działa dla mnie. Mam nadzieję, że ci to pomoże.
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
scrollView.userInteractionEnabled = NO;
}
// at the end of scroll animation, reset the boolean used when scrolls originate from the UIPageControl
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
scrollView.userInteractionEnabled = YES;
}
- 1. Karty przewijania/stronicowania JQuery
- 2. Synchronizacja przewijania UIScrollView
- 3. Widok przewijania stronicowania z kontrolkami podrzędnymi
- 4. UIScrollView włączona obsługa stronicowania z treścią działa dziwnie
- 5. UIScrollView nie pokazuje wskaźnik przewijania
- 6. Dynamiczna wysokość UILabel wewnątrz UIScrollView z funkcją Autolayout
- 7. Jak używać programu DataPager z funkcją stronicowania po stronie serwera?
- 8. UIScrollView inside of UIScrollView?
- 9. iOS: Autolayout powodujący brak przewijania UIScrollView
- 10. Sposób automatycznego przewijania UIScrollView przy użyciu timera
- 11. UIScrollview wywoływanie układu superviewsOdblanie podczas przewijania?
- 12. UIScrollView bloków zdarzeń przewijania UIView animacji
- 13. UITableView Problemy z przewijaniem, gdy wewnątrz UIScrollView
- 14. UIScrollView inside UIScrollView
- 15. Autouzupełnianie w iOS z UIScrollview: Dlaczego widok zawartości przewijania nie wypełnia widoku przewijania?
- 16. Wykrywanie UIScrollView Pozycja
- 17. Problem z funkcją CoordinatorLayout i ImageView dostosowującą szerokość podczas przewijania
- 18. Jak ukraść dotknięcia z UIScrollView?
- 19. Android ListView z awariami stronicowania
- 20. UIScrollView - Przenoszenie widoku do przodu, ale poniżej wskaźników przewijania
- 21. Uzyskaj aktualne wartości przewijania UIScrollView na telefonie iPhone?
- 22. UITableView z niestandardowym zachowaniem podobnym do stronicowania
- 23. Nauka podstaw UIScrollView
- 24. Połącz dwa UIScrollView razem
- 25. UiScrollview z zagnieżdżonym obrazem wygląda dziwnie
- 26. Lepszy sposób na uzyskanie łącznej liczby razem z funkcją stronicowania w SQL Server 2012
- 27. NHibernate stronicowania z SQL Server
- 28. Tworzenie stronicowania z wielu źródeł
- 29. Obliczanie minimumZoomScale z UIScrollView
- 30. Jak wyśrodkować zawartość w UIScrollView z contentOffset
Czy kiedykolwiek znajdziesz rozwiązanie tego problemu? – Eric
Szkoda, że nie było dobre rozwiązanie tego. Wydaje się, że istnieją dwa sposoby na wdrożenie tego: ręczne wdrażanie rozpoznawania gestów lub ręczne wdrażanie stronicowania. – UrK
Tak Jest możliwe, że został wprowadzony przed upływem 6 miesięcy. możesz zrobić ręcznie, rozpoznać gesty .. – JohnWhite