Animación de uipageviewcontroller de idiomas RTL

Sé que esta pregunta es típica y se hizo muchas veces en el foro, pero todavía no puedo resolver mi problema, así que si alguien puede ayudarme, sería GENIAL :)

Estoy creando una aplicación de libro en idiomas árabes y necesito realizar las transiciones del uipageviewcontroller de derecha a izquierda. Y eso es todo lo que tengo que decir.

Una cosa más (si no me hubiera explicado muy bien yo mismo) tengo la necesidad exacta como este hilo: Cómo cambiar la dirección de UIPageViewController de la animación del curl de paginación pero no logré hacer la solución de la que hablaron, así que si alguien puede explicarme o darme un enlace donde pueda saber cómo hacerlo, sería más que suficiente :)

preguntado el 12 de junio de 12 a las 20:06

3 Respuestas

Se puede hacer de esta manera

  1. Intercambie el código de la fuente de datos de pageViewController de viewControllerBeforeViewController a viewControllerAfterViewController

  2. Cambiar UIPageViewControllerSpineLocationMin a UIPageViewControllerSpineLocationMax

Para verificar eso, inicie la plantilla de aplicación basada en página como universal y cambie lo siguiente en 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];
}

y cambio UIPageViewControllerSpineLocationMin a UIPageViewControllerSpineLocationMax y deslice la condición de (indexOfCurrentViewController % 2 == 0) en "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;
}

Fuente: PageViewControllers Apple Doc

Respondido 16 Oct 17, 09:10

Gracias por tu respuesta, ya encontré esto hace algún tiempo, pero me dio un poco de flojera ponerlo en el foro, pero por supuesto que lo habría hecho algún día :) - Abu Romaïssae

Debe sumergirse en los gráficos básicos y la animación central.

  1. Haz 2 capas (una anterior/siguiente y una actual)
  2. Al hacer un 'pangesture' (ver el Guía de manejo de eventos ) necesita ver si se trata de deslizar el dedo hacia la izquierda o hacia la derecha (página anterior/siguiente)
  3. Luego realice una Rotación 3D en la(s) capa(s)

aquí hay un buen ejemplo sobre pasar páginas

Respondido el 12 de junio de 12 a las 20:06

Gracias por su rápida respuesta, vi el enlace sobre el ejemplo y es muy interesante, pero no es lo que necesito, lo puedo usar la próxima vez para un desarrollo de ipad, pero lo que necesito por el momento es invertir el mismo efecto de animación para el uipageviewcontroller - Abu Romaïssae

Madev, ¿no desea utilizar la plantilla "Aplicación basada en páginas"?

Simplemente inicie un nuevo proyecto xCode:

En iOS > Aplicación, busque Aplicación basada en página. Pulsa Aceptar, elige tus opciones. Todo lo que tiene que hacer es proporcionar su contenido (a través de la "Fuente de datos").

Ahora esa es la parte complicada... Pero aquí hay algunos consejos

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

Respondido el 13 de junio de 12 a las 00:06

Gracias, Lawrence Fletcher, sí, ese es el efecto que quería. También utilicé el mismo enlace de Techotopia para realizar mi aplicación, pero lo que necesito es avanzar en la dirección inversa, como cuando leo un libro de lenguaje RTL, espero poder explicar lo que necesito. :S - Abu Romaïssae

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.