2010-10-12 6 views
4

J'ai une scrollview qui génère automatiquement une série de sous-vues contenant des images. Le concept est qu'il s'agit à peu près d'un lecteur de style PDF personnalisé, où chaque page est chargée dans une imageview en tant qu'image. Il y a trois "couches" - l'UIScrollView externe, les sous-vues générées automatiquement et l'imageview à l'intérieur de la sous-vue.UIScrollView Rotation Issues

J'ai eu quelques problèmes avec cela, j'ai déjà posé la question, mais malheureusement, le coeur de ma question était au mauvais endroit. Voici ma deuxième tentative:

En rotation, tout est pivoté selon les besoins. Malheureusement, ce que je reçois: alt text

De toute évidence, je voudrais Image 1 à centrer et pour qu'il y ait aucune indication de l'image 2 jusqu'à ce que vous secouez la vue sur.

Voici mon code pour la mise en place de la vue:

- (void)loadView { 
    [self setUpView]; 
} 
- (void)setUpView { 
    //INITIALISE PAGING SCROLL VIEW 
    CGRect pagingScrollViewFrame = [[UIScreen mainScreen] bounds]; 
    pagingScrollViewFrame.origin.x -= 10; 
    pagingScrollViewFrame.size.width += 20; 
    pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame]; 
    pagingScrollView.contentMode = UIViewContentModeScaleAspectFit; 

    //CONFIGURE PAGING SCROLL VIEW 
    pagingScrollView.pagingEnabled = YES; 
    pagingScrollView.backgroundColor = [UIColor blackColor]; 
    pagingScrollView.contentSize = CGSizeMake(pagingScrollViewFrame.size.width*7, pagingScrollViewFrame.size.height); 

    //ACTIVATE PAGING SCROLL VIEW 
    self.view = pagingScrollView; 

    //ADD PAGES TO SCROLL VIEW 
    for (int i = 0; i < 7; i++){ 
     ImageScrollView *page = [[[ImageScrollView alloc] init] autorelease]; 
     [self configurePage:page forIndex:i]; 
     [pagingScrollView addSubview:page]; 
    } 
} 

Comment puis-je Redéfinir la taille du cadre? Quelle fonction dois-je appeler, etc. Comment centrer l'image?

Je suis nouveau et je m'excuse pour l'ambiguïté de ma question.

Salutations

Répondre

3

Je l'ai compris. C'était le Cadre des pages individuelles que j'avais besoin de changer, donc (avec l'aide d'une autre question) j'ai écrit une méthode de réorientation. La première étape à cela est venue parce que j'ai compris que je devais parcourir et redimensionner chaque image pour chacune de mes pages, puis réappliquer les images à la vue. Pour que cela se produise, je devais créer un tableau que je remplirais dans la boucle For ci-dessus. J'ai 7 pages au total.

alors je pourrais (sur rotate) appeler le dessous méthode Réorienter pour redimensionner chaque vue:

- (void) reOrient{ 
    if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){  
     CGRect f; 
     int i = 0; 
     for (ImageScrollView *page in pageArray) {   
      f = page.frame; 
      f.size.width = 320; 
      f.origin.x = (f.size.width * i); 
      page.frame = f; 
      pagingScrollView.contentSize = CGSizeMake(f.size.width * 7, 480); 
      i++; 
     } 
    }else{ 
     CGRect f; 
     int i = 0; 
     for (ImageScrollView *page in pageArray) {   
      f = page.frame; 
      f.size.width = 480; 
      f.origin.x = (f.size.width * i); 
      page.frame = f; 
      pagingScrollView.contentSize = CGSizeMake(f.size.width * 7, 480); 
      i++; 
     } 
    } 
} 
+1

'pagingScrollView.contentSize = CGSizeMake (f.size.width * 7, 480);' doesn Pas besoin d'être à l'intérieur de la boucle for où il est exécuté pour chaque page. – mahboudz

1

Cela a fonctionné pour moi:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 

    //get current page based on offset before rotation  
    NSInteger currentPage = self.scrollView.contentOffset.x/self.scrollView.bounds.size.width; 

    //set anticipated scrollview content size by switching width and height (they will be switched after rotation) 
    [self.scrollView setContentSize:CGSizeMake(totalPages * self.view.bounds.size.height, self.view.bounds.size.width)]; 

    //set the anticipated content offset based on height before rotation 
    [self.scrollView setContentOffset:CGPointMake(currentPage * self.scrollView.bounds.size.height, 0.0f)]; 
} 

Fondamentalement, je suis en train le contenu décalage pour la nouvelle taille de contenu de scrollview avant de tourner (je change de hauteur et de largeur pour la hauteur et la largeur prévues).

Cela a fonctionné pour moi lors de la rotation d'un UIScrollView en mode plein écran.

Tous les sous-vues paginées ont le masque Autoresizing suivant de sorte qu'ils tombent parfaitement en place après rotation:

UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin