1

我有一個關於UIPageViewControllers的策略問題。它似乎完全符合我的要求,但有一些我不確定的事情。我想也許有人可能會有一兩個寶石分享。 :)PageViewController和方向更改

所以在這裏:我想使用以縱向或橫向模式顯示內容,但是,無論設備是什麼方向,它們必須位於同一個控制器中(即具有相同的視圖) 。原因在於內容必須以這種方式(橫向)來縮放,以致兩個內容的「頁面」一次放大,而不是單獨放大。此時,我無法真正瞭解如何在中處理這個問題,因爲據我所知,您無法在2個視圖控制器之間共享視圖。那麼有沒有人對這個問題有所瞭解?非常感謝提前!

回答

0

我偷了這從埃裏卡喪盾(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; 
} 

給她一些愛。並注意超級聰明的「if(sideBySide & &(leftPage%2))leftPage--;」,它確保左頁始終是奇數頁。

-A

+0

酷!謝謝(你的)信息!順便說一句,什麼是SAFE_ADD? – user978838

+0

@ user978838對不起,我忘了 - DEFINEs是:'#define IS_IPHONE([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) #define SAFE_ADD(_Array_,_Object_){if(_Object_ && [_Array_ isKindOfClass:[NSMutableArray ([THE_OBJECT respondsToSelector:THE_SELECTOR])[[THE_OBJECT performSelector:THE_SELECTOR withObject:THE_ARG]:nil)'[pageControllers addObject:_Object_];} #define SAFE_PERFORM_WITH_ARG(THE_OBJECT,THE_SELECTOR,THE_ARG) – AMayes