PageViewController и изменение ориентации - PullRequest
1 голос
/ 19 ноября 2011

У меня есть вопрос стратегии относительно UIPageViewControllers.Кажется, что это идеально соответствует моим требованиям, но есть несколько вещей, в которых я не уверен.Я подумал, что, может быть, у кого-то есть драгоценный камень или два, которыми можно поделиться.:)

Итак, здесь: Я хотел бы использовать PageViewCtl для отображения содержимого в портретном или ландшафтном режиме, однако они должны находиться в одном контроллере (т.е. иметь одинаковое представление) независимо от того, чтоориентация устройства есть.Причина заключается в том, что контент должен масштабироваться таким образом (в горизонтальной ориентации), чтобы обе «страницы» контента масштабировались одновременно, а не по отдельности.На данный момент я не могу понять, как это можно обработать в PageViewCtl, поскольку, насколько я знаю, вы не можете разделить представление между двумя контроллерами представления.Так есть ли у кого-нибудь понимание этого вопроса?Большое спасибо заранее!

1 Ответ

0 голосов
/ 22 ноября 2011

Я украл это у Эрики Садун (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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...