RTL语言uipageviewcontroller动画

Abu*_*sae 4 iphone right-to-left ios5 uipageviewcontroller

我知道这个问题是典型的,并且在论坛上被多次询问,但我仍然无法解决我的问题,所以如果任何机构可以帮助那将是伟大的:)

我正在用阿拉伯语创建一个书籍应用程序,我需要从右到左执行uipageviewcontroller的转换.这就是我要说的.

还有一件事(如果我没有很好地解释我自己)我有这个线程的确切需要:如何更改UIPageViewController分页卷曲动画的方向,但我无法设法他们谈到的解决方案,所以如果有人可以解释我或给我一个链接,我可以有如何做到这将是绰绰有余:)

小智 9

它可以这种方式完成

  1. 将pageViewController的数据源代码从中viewControllerBeforeViewController转换为viewControllerAfterViewController

  2. 更改UIPageViewControllerSpineLocationMin到UIPageViewControllerSpineLocationMax

要检查这一点,请将基于页面的应用程序模板作为通用启动并更改以下内容 ModelController.m

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
    if (index == NSNotFound) {
        return nil;
    }

    index++;
    if (index == [self.pageData count]) {
        return nil;
    }
    return [self viewControllerAtIndex:index storyboard:viewController.storyboard];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }

    index--;
    return [self viewControllerAtIndex:index storyboard:viewController.storyboard];
}
Run Code Online (Sandbox Code Playgroud)

和改变UIPageViewControllerSpineLocationMin到UIPageViewControllerSpineLocationMax与在"RootViewController.m"滑动的(indexOfCurrentViewController%2 == 0)的条件

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
{
    if (UIInterfaceOrientationIsPortrait(orientation) || ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)) {
        UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
        NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

        self.pageViewController.doubleSided = NO;
        return UIPageViewControllerSpineLocationMax;
    }

    DataViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
    NSArray *viewControllers = nil;

    NSUInteger indexOfCurrentViewController = [self.modelController indexOfViewController:currentViewController];
    if (indexOfCurrentViewController == 0 || indexOfCurrentViewController % 2 == 0) {
        UIViewController *previousViewController = [self.modelController pageViewController:self.pageViewController viewControllerBeforeViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil];
    } else {
        UIViewController *nextViewController = [self.modelController pageViewController:self.pageViewController viewControllerAfterViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil];
    }
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];


    return UIPageViewControllerSpineLocationMid;
}
Run Code Online (Sandbox Code Playgroud)

来源:PageViewControllers Apple Doc