L'on a accepté la réponse est très bon, mais il ne fonctionnera que pour l' UIScrollView
classe, et aucun de ses descendants. Par exemple, si vous avez beaucoup de points de vue et de le convertir en UICollectionView
, vous ne serez pas en mesure d'utiliser cette méthode, car la collecte de vue de supprimer les points de vue qu'il pense ne sont pas "visibles" (donc, même si elles ne sont pas coupées, elles disparaîtront).
Le commentaire à propos de qui mentionne scrollViewWillEndDragging:withVelocity:targetContentOffset:
est, à mon avis, la réponse correcte.
Ce que vous pouvez faire est, à l'intérieur de ce délégué de la méthode de calcul de la page en cours/index. Vous pourrez ainsi décider de la vitesse et de la cible décalage mérite une "page suivante" du mouvement. Vous pouvez obtenir assez proche de l' pagingEnabled
comportement.
note: je suis habituellement un RubyMotion dev ces jours-ci, de sorte que quelqu'un la preuve de ce Obj-C du code de la décision correcte. Désolé pour le mélange de camelCase et snake_case, je copie et collé une grande partie de ce code.
- (void) scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetOffset
{
CGFloat x = targetOffset->x;
int index = [self convertXToIndex: x];
CGFloat w = 300f; // this is your custom page width
CGFloat current_x = w * [self convertXToIndex: scrollView.contentOffset.x];
// even if the velocity is low, if the offset is more than 50% past the halfway
// point, proceed to the next item.
if ( velocity.x < -0.5 || (current_x - x) > w / 2 ) {
index -= 1
}
else if ( velocity.x > 0.5 || (x - current_x) > w / 2 ) {
index += 1;
}
if ( index >= 0 || index < self.items.length ) {
CGFloat new_x = [self convertIndexToX: index];
targetOffset->x = new_x;
}
}