UIScrollView - (bounces = NO) parece anular (pagingEnabled = YES)
Eu tenho um UIScrollView com paginação nele (então o modelo típico com um UIPageControl e arrastando / arrastando para a esquerda e direita entre as páginas), e eu tenho que funcionar bem. O estranho é que quando eu queria me livrar de saltar (de modo que você não pode ver preto por trás da interface do usuário nos lados esquerdo e direito), de repente paginação não funciona mais.
Em outras palavras, quando:
scrollView.pagingEnabled = YES;
scrollView.bounces = YES;
Tudo funciona bem, exceto que não gosto do salto na página (0) e na página (tamanho-1). Mas quando eu faço isso:
scrollView.pagingEnabled = YES;
scrollView.bounces = NO;
Ele pára de se encaixar em cada página, tratando todas as páginas juntas como uma página longa. Assim, parece que, por alguma razão, a paginação é dependente de pular, o que é bom, desde que eu possa de alguma forma parar o pulo. Então, há outra maneira de se livrar disso? Ou há algo que estou fazendo errado?
EDITAR:A solução:
@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