2010-07-31 8 views
6

J'essaie de faire un pagination UIScrollView afficher plusieurs pages en même temps, en effet, rendant la taille de la page plus petite que les limites UIScrollview. Je fais des recherches depuis des heures, mais personne ne semble avoir une bonne solution.UIScrollView avec plusieurs pages de tailles de page visibles ou plus petites

Je suis en mesure d'obtenir l'effet visuel par le dimensionnement du UIScrollview à la taille que je veux une page à l'être, éteindre coupure de sous-vue, et en le plaçant dans un conteneur qui passe tous ses robinets au UIScrollview. Le problème avec ceci est qu'avec les pages Y visibles, il vous permet de faire défiler la dernière page tout à fait à gauche, laissant Y-1 pages vides après la dernière page. Quelqu'un connaît un moyen de contourner cela, ou une autre approche du problème?

+0

Lorsque l'utilisateur parcourt vos pages, voulez-vous balayer d'un montant inférieur, puis la largeur de scrollView? Première page montrant 1,2,3 et après le balayage 2,3,4? Ou sera 4,5,6 après le balayage? – tonklon

+0

Je voudrais qu'il agisse comme une scrollview normale, le défilement devrait être 1: 1 avec les mouvements des doigts, mais il se verrouille sur les pages lorsque le doigt est enlevé. – Seventoes

Répondre

6

Pour l'extrémité droite, essayez de réduire la largeur de la propriété assez de défilante contentSize que la vue de défilement arrêter la recherche avant qu'il ne soit à la dernière page. Pour l'extrémité gauche, réduisez la propriété frame.origin.x de chaque page du même montant. Les premières pages auront une position x négative dans la vue déroulante. Essentiellement, en faisant en sorte que la vue défilante pense que son contenu est seulement les pages 2 à l'avant-dernière minute.

Par exemple:

// scrollView has been initialized and added to the view hierarchy according to the link in @richard's answer: 
// http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html 

CGFloat pageNum=10; 
CGFloat pageWidth=scrollView.frame.size.width; 
CGFloat pageHeight=scrollView.frame.size.height; 
CGFloat visibleWidth=320; 


// Set scrollView contentSize and create pages: 

CGFloat leftShift=floor(((visibleWidth-pageWidth)/2)/pageWidth)*pageWidth; 
CGFloat contentSizeReduction=2*leftShift; 

scrollView.contentSize = CGSizeMake(pageNum*pageWidth-contentSizeReduction,pageHeight); 

for(int i=0; i<pageNum; i++) { 
    CGRect pageFrame = CGRectMake(i*pageWidth-leftShift, 0, pageWidth, pageHeight); 
    UIView *pageView = [[[UIView alloc] initWithFrame:pageFrame] autorelease]; 

    // Initialize the page view for the current index here 

    [scrollView addSubview:pageView]; 
} 

Pardonne fautes de frappe dans le code. Je n'ai pas encore essayé cela.

Faites-moi savoir si cela fonctionne.

7

Je pense que vous avez besoin de quelque chose comme les aperçus dans le navigateur mobile safari. Voici un site avec quelques exemples de code. Preview Sample Code

Questions connexes