Um UIScrollViewcom 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 UIScrollViewlargura de.
Então, desde que você quiser ver as outras páginas, é claro, definir clipsToBoundsa NOcomo mhjoy afirmou. O truque agora é fazer com que ele role quando o usuário começar a arrastar fora do intervalo do UIScrollViewquadro de. Minha solução (quando tive que fazer isso muito recentemente) foi a seguinte:
Crie uma UIViewsubclasse (ou seja ClipView) que conterá as UIScrollViewsubvisões e suas. Essencialmente, deve ter a estrutura que você presumiria UIScrollViewque teria em circunstâncias normais. Coloque o UIScrollViewno centro do ClipView. Certifique-se de que o ClipView's clipsToBoundsesteja definido como YESse sua largura for menor que a de sua visualização pai. Além disso, o ClipViewprecisa 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 UIScrollViewpara o quadro da visão de seu pai, exatamente o que você precisa.
Outra opção seria criar uma subclasse UIScrollViewe sobrescrever seu - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) eventmé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 YESbase apenas no UIScrollViewquadro 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.