Estoy buscando una manera de hacer un UIViewAnimationTransitionCurlUp o UIViewAnimationTransitionCurlDown de transición en el iPhone pero en lugar de arriba a abajo, lo hacen desde la izquierda a la derecha (o arriba/abajo en el modo de paisaje). He visto este pedido aroud el internet un par de veces pero ninguno sems para obtener una respuesta. Sin embargo, creo que esto es posible.

He intentado cambiando el punto de Vista de la transformación y de la vista.la capa de transformar, pero que no afectan a la transición. Desde la transición los cambios cuando el dispositivo cambia de orientación supongo que hay una manera de engañar al dispositivo para que use el paisaje de transición en el modo de retrato y viceversa?

OriginalEl autor Dimitris | 2009-10-26

5 Comentarios

  1. 9

    Es posible hacer rizos en cualquiera de las cuatro direcciones mediante el uso de un contenedor de vista. Coloque el recipiente de vista de la transformación en el ángulo que desee y, a continuación, hacer el curl mediante la adición de la vista para el contenedor de vista, no es tu principal de la aplicación vista de que no tiene una transformada de marco:

    NSView* parent = viewController.view; //the main view
    NSView* containerView = [[[UIView alloc] initWithFrame:parent.bounds] autorelease];
    containerView.transform = CGAffineTransformMakeRotation(<your angle here, should probably be M_PI_2 * some integer>);
    [parent addSubview:containerView]; 
    
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:containerView cache:YES];
    [containerView addSubview:view];
    [UIView commitAnimations];
    ¿Qué es la vista que se están agregando a la containerView? @fluXa

    OriginalEl autor fluXa

  2. 4

    De hecho, me las arreglé para conseguir este efecto cambiando la orientación de mi UIViewController. Lo extraño es que, tuve mi controlador nesten en otro cuando no estaba funcionando, pero cuando me puse a él como a la inmediata vista controlador, funcionó.

    Código que lo hace:

    En un UIViewController que es el principal controlador de vista en mi aplicación delegado y sólo permite la orientación horizontal (como se puede ver en el 2º método a continuación) tengo lo siguiente:

    -(void)goToPage:(int)page flipUp:(BOOL)flipUp {
    
         //do stuff...
    
         //start the animated transition
         [UIView beginAnimations:@"page transition" context:nil];
         [UIView setAnimationDuration:1.0];
         [UIView setAnimationTransition:flipUp ? UIViewAnimationTransitionCurlUp : UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
    
         //insert your new subview
         //[self.view insertSubview:currentPage.view atIndex:self.view.subviews.count];
    
          //commit the transition animation
          [UIView commitAnimations];
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
         return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }
    Lo que sobre de la barra de estado ? – barra de estado se verá en el lado derecho – cuando se utiliza la aplicación ?
    Esto no parece funcionar.
    Asegúrese de que su Vista Controlador no está anidado, o si es asegurarse de que sus padres son de aplicación el derecho de la orientación…

    OriginalEl autor Dimitris

  3. 2

    También he luchado con esto. Para obtener el curl para que vengan de la derecha o de la izquierda se puede crear una posición intermedia y transformarla. Así que, digamos que a la vista está en transición (myView) es un niño de la ventana principal (parentView):

    -parentView
    -->myView

    Se inserte una posición intermedia entre (fácil de hacer en el Interface Builder):

    -parentView
    -->containerView
    --->myView

    A continuación, utilice el código siguiente para voltear el envase de 90 grados a la izquierda y la transición de visión de 90 grados a la derecha:

    containerView.transform = CGAffineTransformMakeRotation(-M_PI_2);
    myView.transform = CGAffineTransformMakeRotation(M_PI_2);

    myView aparecen en posición vertical para el usuario, pero la transición va a pensar que es aplicado a 90 grados desde la izquierda.

    Tenga en cuenta que dependiendo de cómo auto-escalado de sus puntos de vista son, usted podría tener que arreglar los tamaños de fotograma después de aplicar la transformación, por ejemplo, la

      containerView.frame = CGRectMake(0.0, 0.0, 768.0, 1024.0);
      myWebView.frame = CGRectMake(0.0, 0.0, 768.0, 1024.0);

    Espero que esto ayude. El es el más cercano que puede llegar a UIViewAnimationTransitionCurlLeft y UIViewAnimationTransitionCurlRight.

    Excelente respuesta! Su receta funciona como un encanto.

    OriginalEl autor Brad V

  4. 2

    He probado la solución de fluXa en iOS5 (Así que tuve que usar [UIView trans……]) pero no funcionó: el rizo todavía iba hacia arriba o hacia abajo. Al parecer, la transición ahora no tome la transformación de la vista en cuenta. Así, en caso de que alguien más quiere hacer el mismo truco con iOS5, la solución es añadir otro contenedor en el medio y animar la transición desde allí.

    Aquí está mi código, que es un poco específica, ya que quiero curl», a la izquierda, pero con la esquina inferior de curling. Como se si estoy rasgando una página de un cuaderno de notas.

    UIView* parent = self.view; //the main view
    CGRect r = flipRectSize(parent.bounds);
    UIView* containerView = [[UIView alloc] initWithFrame:r];
    CGAffineTransform t = CGAffineTransformMakeRotation(-M_PI_2);
    t = CGAffineTransformTranslate(t, -80, -80);
    containerView.transform = CGAffineTransformScale(t, -1, 1);
    [parent addSubview:containerView]; 
    
    UIView* container2 = [[UIView alloc] initWithFrame:r];
    [containerView addSubview:container2]; 
    
    UIImageView* v = [[UIImageView alloc] initWithFrame:r];
    v.image = [UIImage imageWithCGImage:contents.CGImage scale:contents.scale orientation:UIImageOrientationLeftMirrored];
    [container2 addSubview:v];
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [UIView transitionWithView:container2
                          duration:DURATION_CURL_ANIMATION
                           options:UIViewAnimationOptionTransitionCurlUp
                        animations:^{
                            [v removeFromSuperview];
                        } completion:^(BOOL finished) {
                            if (completion) {
                                completion(finished);
                            }
                            [containerView removeFromSuperview];}];});

    Notas:

    1. Debo admitir que la transformación afín traducir (80,80) no tiene sentido en mi mente, pero es necesario para el iphone, probablemente no funcionará en el iPad.
    2. flipSizeRect voltea la anchura y altura de un rectángulo (que ya tiene, ¿verdad?)
    3. la dispatch_after es necesario porque he añadido el contenedor y, a continuación, desea eliminar una vista de la jerarquía. Si dejo el envío de nada anima. Mi mejor conjetura es que primero tenemos que dejar que el sistema de una fase de diseño, antes de que podamos animar un retiro.

    OriginalEl autor Michiel van Liempt

  5. 0

    Creo que no hay un camino más allá de la escritura de una animación personalizada.

    Más importante que usted probablemente no debería intentar. El curl y curl de abajo son parte de la interfaz de usuario de la gramática, que indica al usuario que un punto de vista está siendo levantado o poner sobre la vista actual. Se supone que debe de ser como una nota adhesiva ser puesto hacia abajo y luego se retira. A la izquierda<->derecho curl más probable es que se interpreta como el algo como arrancar una página de un libro. Confundir a los usuarios.

    Siempre que usted se encuentra tratando de hacer algo en la interfaz de la API estándar no hacer fácilmente, usted debe preguntarse si tal un nuevo método de comunicar algo importante para el usuario y si es similar a los existentes en la interfaz de la gramática. Si no, entonces usted no debería molestar.

    Inusual interfaces tienen un primer factor wow pero que conducen a la frustración y errores en el día-a-día de uso. También pueden causar Apple para rechazar su aplicación.

    No es inusual. Es exactamente el mismo. De hecho, Apple hace, sólo en la orientación opuesta. Estoy creando un paisaje interactivo libro así que estoy seguro de que esta animación se comunicará el libro-sensación para el usuario. El efecto funciona para portátiles (como la aplicación de notas). Pero para una correcta libro necesito una sensación diferente.
    Si usted mira el curl de transición, usted va a ver que se aleja de las tres esquinas de la vista. Una vuelta de página sólo se separa en dos. El curl mueve la vista en diagonal, mientras que una página se mueve sólo de izquierda a derecha. La diferencia es sutil, pero importante a las expectativas del usuario.
    No creo que usted puede conseguir la transición que desee mediante una simple transformación debido a que el principal movimiento en la curva de transición es el movimiento diagonal de la esquina inferior derecha. No importa cómo girar o transformar la visión, que la diagonal de movimiento seguirá siendo el que va a destruir la ilusión de un simple de izquierda a derecha curl.

    OriginalEl autor TechZen

Dejar respuesta

Please enter your comment!
Please enter your name here