【问题标题】:PageViewController and Orientation changePageViewController 和方向改变
【发布时间】:2011-11-19 12:41:29
【问题描述】:

我有一点关于UIPageViewControllers 的策略问题。看起来它完全符合我的要求,但有些事情我不确定。我想也许有人在那里可能有一两颗宝石可以分享。 :)

这里是这样:我想使用PageViewCtl 以纵向或横向模式显示内容,但是,无论设备的方向如何,它们都必须在同一个控制器中(即具有相同的视图)。原因是内容必须以这样一种方式(横向)可缩放,即内容的两个“页面”都可以同时缩放,而不是单独缩放。在这一点上,我真的看不出如何在PageViewCtl 中处理这件事,因为据我所知,您不能在 2 个视图控制器之间共享视图。那么有人对这个问题有任何见解吗?非常感谢!

【问题讨论】:

    标签: ios uiviewcontroller device-orientation uipageviewcontroller


    【解决方案1】:

    这是我从 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;
    }
    

    给她一些爱。并注意超级聪明的“if (sideBySide && (leftPage % 2)) leftPage--;”,它确保左页始终是奇数页。

    -A

    【讨论】:

    • 酷!谢谢(你的)信息!顺便问一下 SAFE_ADD 是什么?
    • @user978838 抱歉,我漏掉了——DEFINE 是:#define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) #define SAFE_ADD(_Array_, _Object_) {if (_Object_ && [_Array_ isKindOfClass:[NSMutableArray class]]) [pageControllers addObject:_Object_];} #define SAFE_PERFORM_WITH_ARG(THE_OBJECT, THE_SELECTOR, THE_ARG) (([THE_OBJECT respondsToSelector:THE_SELECTOR]) ? [THE_OBJECT performSelector:THE_SELECTOR withObject:THE_ARG] : nil)
    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多