RTL languages uipageviewcontroller animation

后端 未结 3 2105
孤街浪徒
孤街浪徒 2020-12-18 07:40

I know this question is typique and it was asked many times in the forum, but I still cannot solve my problem, so please if any body can help be that would be GREAT :)

相关标签:
3条回答
  • 2020-12-18 07:52

    Madev, Do you not want to use the "PageBased Application" template?

    Simply start a new xCode Project:

    Under iOS > Application , look for Page-Based Application. Hit Okay, Choose you Options. All you have to do is supply your content (via the "DataSource").

    Now that is the complicated part...But here's some tips

    http://www.techotopia.com/index.php/Implementing_a_Page_based_iOS_5_iPhone_Application_using_UIPageViewController

    http://www.techotopia.com/index.php/An_Example_iOS_5_iPhone_UIPageViewController_Application

    0 讨论(0)
  • 2020-12-18 07:53

    It can be done in this way

    1. Swap the code of pageViewController's datasource from viewControllerBeforeViewController to viewControllerAfterViewController

    2. Change UIPageViewControllerSpineLocationMin to UIPageViewControllerSpineLocationMax

    To check that, start Page-Based Application template as Universal and change the following in 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];
    }
    

    and change UIPageViewControllerSpineLocationMin to UIPageViewControllerSpineLocationMax and swipe the condition of (indexOfCurrentViewController % 2 == 0) in "RootViewController.m"

    - (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;
    }
    

    Source: PageViewControllers Apple Doc

    0 讨论(0)
  • 2020-12-18 08:02

    You should dive into core graphics and core animation.

    1. Make 2 layers (a previous/next and current)
    2. When doing a 'pangesture' (see the Event Handling Guide ) you need to see if it's a swipe left or swipe right (previous/next page)
    3. Then perform a 3D Rotation on the layer(s)

    here's a nice example about flipping pages

    0 讨论(0)
提交回复
热议问题