Es mi primer mensaje en stackoverflow. Soy un novato desarrollador de iOS y no soy un hablante nativo de inglés, por lo que haré todo lo posible para explicar mi problema.UIView transitionFromView: toView: la animación no funciona.
Problema:
he añadido dos puntos de vista a la ventana de mi AppDelegate y quiero saltar de uno a otro usando:
UIView transitionFromView:toView:
La primera vista (MainScreenView) tiene su propia ViewController
. En el archivo MainScreenView .xib tengo un botón con una acción que llama al método "goShow" implementado en mi AppDelegate. En ese método, uso UIView transitionFromView:toView:
para pasar a la segunda vista. Hasta ahora todo está funcionando bien. Mi segunda vista (una vista de desplazamiento) se declara programáticamente en mi AppDelegate y tiene un conjunto de imágenes dentro de ella (picturesViewController) y, además de eso, tiene un UIPinchGestureRecognizer
.
Estoy usando un reconocedor de gestos para volver a mi pantalla principal. Ahí es donde está el problema. Cuando hago un gesto de pellizco en la vista de desplazamiento, aparece MainScreenView.view
inmediatamente antes de la animación, por lo que la animación volteada se ve mal.
El código que estoy usando es:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
mainScreen = [[MainScreenViewController alloc] initWithNibName:@"MainScreenViewController" bundle: [NSBundle mainBundle]];
CGRect frame = self.window.bounds;
int pageCount = 10;
scrollView = [[UIScrollView alloc] initWithFrame:frame];
scrollView.contentSize = CGSizeMake(320*pageCount, 480);
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = FALSE;
scrollView.showsVerticalScrollIndicator = FALSE;
scrollView.delegate = self;
[...] 'While' adding pictures to de scrollView
UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];
[self.window addSubview: scrollView];
[scrollView setHidden:TRUE];
[self.window addSubview: mainScreen.view];
[self.window makeKeyAndVisible];
return YES;
}
-(void) goShow{
[UIView transitionFromView:mainScreen.view
toView:scrollView
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews
completion:NULL];
[UIView commitAnimations];
}
-(void) goBackToMain {
[UIView transitionFromView:scrollView
toView:mainScreen.view
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews
completion:NULL];
[UIView commitAnimations];
}
estoy usando mostrar/ocultar puntos de vista en lugar de addSubview/removeFromSuperView
porque probé el agregar y quitar y tengo un accidente de aplicación en el gesto de pellizco, exactamente en la misma paso que está fallando la animación. Probablemente es el mismo error, pero no puedo encontrar la razón para esto. Cualquier ayuda sería apreciada.
Gracias.
Ok. Con la ayuda de Adrian, aquí está el código UIPinchGesture que resolvió mi problema:
[...]
UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain:)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];
-(void)goBackToMain:(UIPinchGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateEnded)
{
[UIView transitionFromView:scrollView
toView:mainScreen.view
duration:0.4
options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews
completion:nil];
[UIView commitAnimations];
}
Eso era mucho mejor explicado que la mayoría de hablantes nativos de inglés a administrar. +1. –