Um UIScrollView
com paginação habilitada irá parar em múltiplos de sua largura (ou altura) de quadro. Portanto, a primeira etapa é descobrir a largura que você deseja que suas páginas tenham. Faça com que seja a largura do UIScrollView
. Em seguida, defina os tamanhos de sua subvisualização com o tamanho que você precisa e defina seus centros com base nos múltiplos da UIScrollView
largura de.
Então, desde que você quiser ver as outras páginas, é claro, definir clipsToBounds
a NO
como mhjoy afirmou. O truque agora é fazer com que ele role quando o usuário começar a arrastar fora do intervalo do UIScrollView
quadro de. Minha solução (quando tive que fazer isso muito recentemente) foi a seguinte:
Crie uma UIView
subclasse (ou seja ClipView
) que conterá as UIScrollView
subvisões e suas. Essencialmente, deve ter a estrutura que você presumiria UIScrollView
que teria em circunstâncias normais. Coloque o UIScrollView
no centro do ClipView
. Certifique-se de que o ClipView
's clipsToBounds
esteja definido como YES
se sua largura for menor que a de sua visualização pai. Além disso, o ClipView
precisa de uma referência ao UIScrollView
.
A etapa final é substituir - (UIView *)hitTest:withEvent:
dentro do ClipView
.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Isso basicamente expande a área de toque do UIScrollView
para o quadro da visão de seu pai, exatamente o que você precisa.
Outra opção seria criar uma subclasse UIScrollView
e sobrescrever seu - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
método; entretanto, você ainda precisará de uma visualização de contêiner para fazer o recorte, e pode ser difícil determinar quando retornar com YES
base apenas no UIScrollView
quadro de.
NOTA: Você também deve dar uma olhada no hitTest: withEvent: modificação de Juri Pakaste se estiver tendo problemas com a interação do usuário de subvisualização.