Mam UIScrollView z stronicowanie w nim (tak typowy model z UIPageControl i przeciąganie/przesuwanie w lewo i prawo między stronami), i mam to działa dobrze. Dziwne jest to, że gdy chciałem się pozbyć podskakiwania (tak, że nie widzisz czerni za interfejsem po lewej i prawej stronie), nagle stronicowanie już nie działa.UIScrollView - (bounce = NO) wydaje się przesłonić (pagingEnabled = YES)
Innymi słowy, gdy:
scrollView.pagingEnabled = YES;
scrollView.bounces = YES;
Wszystko działa poprawnie, z wyjątkiem I nie lubią odbijając na stronie (0) i strony (długość-1). Ale kiedy to zrobię:
scrollView.pagingEnabled = YES;
scrollView.bounces = NO;
Zatrzymuje zatrzaskiwanie na miejscu na każdej stronie, zamiast tego traktuje wszystkie strony razem jako jedną długą stronę. Wygląda więc na to, że z jakiegoś powodu stronicowanie zależy od podskakiwania, co jest w porządku, dopóki mogę jakoś powstrzymać podskakiwanie. Czy istnieje inny sposób na pozbycie się tego? Czy jest coś, co robię źle?
EDIT: Rozwiązanie:
@interface PagingScrollView : UIScrollView
@end
@implementation PagingScrollView
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
self.pagingEnabled = YES;
self.bounces = YES;
}
return self;
}
- (void)setContentOffset:(CGPoint)offset
{
CGRect frame = [self frame];
CGSize contentSize = [self contentSize];
CGPoint contentOffset = [self contentOffset];
// Clamp the offset.
if (offset.x <= 0)
offset.x = 0;
else if (offset.x > contentSize.width - frame.size.width)
offset.x = contentSize.width - frame.size.width;
if (offset.y <= 0)
offset.y = 0;
else if (offset.y > contentSize.height - frame.size.height)
offset.y = contentSize.height - frame.size.height;
// Update only if necessary
if (offset.x != contentOffset.x || offset.y != contentOffset.y)
{
[super setContentOffset:offset];
}
}
@end
Wow, to głupie. Cóż, spróbuję tego, możesz być po prostu "wielkim zwycięzcą" w tym temacie. – Eli
To działa, ale musisz przesłonić -setContentOffset, nie -setContentOffset: animowany, ponieważ ten wywoła funkcję, która nie jest zawsze wywoływana, podczas gdy pierwsza zastępuje funkcję mutatora dla contentOffset, dzięki czemu złapiesz wszystkie przypadki. – Eli
To dziwne. Robię dużo tego typu rzeczy i zwykle metoda pojedynczego parametru wywołuje animowany wariant z animacją: TAK – rpetrich