1

J'ai un peu d'une question de stratégie concernant UIPageViewControllers. Il semble que cela correspond parfaitement à mes exigences, mais il y a quelques choses dont je ne suis pas sûr. J'ai pensé que peut-être quelqu'un là-bas pourrait avoir une gemme ou deux à partager. :)PageViewController et Orientation changer

Alors voilà: Je voudrais utiliser pour afficher le contenu en mode portrait ou paysage, cependant, ils doivent être dans le même contrôleur (c'est-à-dire avoir la même vue) quelle que soit l'orientation du périphérique . La raison en est que le contenu doit être zoomable de telle sorte (en orientation paysage) que les deux "pages" du contenu soient zoomées une fois, pas séparément. À ce stade, je ne peux pas vraiment voir comment cela pourrait être traité dans un puisque, autant que je sache, vous ne pouvez pas partager une vue entre 2 contrôleurs de vue. Alors, quelqu'un a-t-il un aperçu de cette question? Merci beaucoup d'avance!

Répondre

0

J'étole de cette Erica Sadun (https://github.com/erica/iOS-5-Cookbook):

// Update interface to the given page 
- (void) fetchControllersForPage: (uint) requestedPage orientation: (UIInterfaceOrientation) orientation 
{ 
    BOOL sideBySide = [self useSideBySide:orientation]; 
    int numberOfPagesNeeded = sideBySide ? 2 : 1; 
    int currentCount = self.viewControllers.count; 

    uint leftPage = requestedPage; 
    if (sideBySide && (leftPage % 2)) leftPage--; 

    // Only check against current page when count is appropriate 
    if (currentCount && (currentCount == numberOfPagesNeeded)) 
    { 
     if (pageNumber == requestedPage) return; 
     if (pageNumber == leftPage) return; 
    } 

    // Decide the prevailing direction by checking the new page against the old 
    UIPageViewControllerNavigationDirection direction = (requestedPage > pageNumber) ? UIPageViewControllerNavigationDirectionForward : UIPageViewControllerNavigationDirectionReverse; 
    [self updatePageTo:requestedPage]; 

    // Update the controllers 
    NSMutableArray *pageControllers = [NSMutableArray array]; 
    SAFE_ADD(pageControllers, [self controllerAtPage:leftPage]);  
    if (sideBySide) 
     SAFE_ADD(pageControllers, [self controllerAtPage:leftPage + 1]); 

    [self setViewControllers:pageControllers direction: direction animated:YES completion:nil]; 
} 

// Entry point for external move request 
- (void) moveToPage: (uint) requestedPage 
{ 
    [self fetchControllersForPage:requestedPage orientation:(UIInterfaceOrientation)[UIDevice currentDevice].orientation]; 
} 

#pragma mark Delegate 

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation 
{ 
    NSUInteger indexOfCurrentViewController = 0; 
    if (self.viewControllers.count) 
     indexOfCurrentViewController = ((UIViewController *)[self.viewControllers objectAtIndex:0]).view.tag; 
    [self fetchControllersForPage:indexOfCurrentViewController orientation:orientation]; 

    BOOL sideBySide = [self useSideBySide:orientation]; 
    self.doubleSided = sideBySide; 

    UIPageViewControllerSpineLocation spineLocation = sideBySide ? UIPageViewControllerSpineLocationMid : UIPageViewControllerSpineLocationMin; 
    return spineLocation; 
} 

lui donner un peu d'amour. Et notez le super-intelligent "if (sideBySide & & (leftPage% 2)) leftPage--;", ce qui garantit que la page de gauche est toujours une page impaire.

-A

+0

Cool! Merci pour l'info! Qu'est-ce que SAFE_ADD en passant? – user978838

+0

@ user978838 Désolé je suis parti que les out-- DEFINE sont: '#define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) #define SAFE_ADD (_Array_, _Object_) {if (_Object_ && [_Array_ isKindOfClass: [NSMutableArray class]]) [pageContrôleurs addObject: _Object_];} #define SAFE_PERFORM_WITH_ARG (THE_OBJECT, THE_SELECTOR, THE_ARG) (([THE_OBJECT répondToSelector: THE_SELECTOR])? [THE_OBJECT performSelector: THE_SELECTOR avecObjet: THE_ARG]: nil) ' – AMayes

Questions connexes