Question

C'est mon premier post sur stackoverflow.Je suis un développeur iOS débutant et je ne suis pas un locuteur natif anglais, donc je vais faire de mon mieux pour expliquer mon problème.

Problème:

J'ai ajouté deux points de vue, à mon AppDelegate fenêtre et je veux pour basculer de l'un à l'autre à l'aide de:

 UIView transitionFromView:toView:

Le premier point de vue (MainScreenView) dispose de sa propre ViewController.Sur le MainScreenView .xib fichier j'ai un bouton avec une action qui appelle la méthode "goShow" mis en place dans mon AppDelegate.Dans cette méthode que j'utilise UIView transitionFromView:toView: la transition vers le second point de vue.Jusqu'à présent, tout fonctionne bien.Mon second point de vue (un scrollview) est déclaré par programmation dans mon AppDelegate et a un tas de photos à l'intérieur (picturesViewController) et sur le dessus de ceux-ci, a une UIPinchGestureRecognizer.

Je suis à l'aide d'un geste de reconnaissance pour retourner à mon MainScreenView.C'est où est le problème.Quand je fais un geste de pincement sur le scrollview l' MainScreenView.view apparaît immédiatement, avant que l'animation, de sorte que le flip animation de mal.

Le code que j'utilise est:

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

Je suis à l'aide d'afficher/masquer les points de vue au lieu de addSubview/removeFromSuperView parce que j'ai essayé de l'ajouter et de supprimer et a une application crash dans le geste de pincement, exactement dans la même étape qu'est l'échec de l'animation.C'est probablement la même erreur, mais je suis incapable de trouver la raison pour cela.Toute aide serait appréciée.

Merci.

Ok.Avec Adrian aider, voici le UIPinchGesture code qui a résolu mon problème:

[...]

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];
}
Était-ce utile?

La solution

Lire plus sur les animations dans iOS.

Dans votre exemple, vous avez oublié [UIView beginAnimations].

Autres conseils

Tout d'abord, vous ne pouvez pas mélanger l'ancienne méthode beginAnimation commitAnimation combinaison avec le nouveau bloc de la méthode transitionFromView.

Deuxièmement, lors de l'utilisation de bloc de la méthode d'animation, assurez-vous d'utiliser un récipient (probablement une UIView) qui sera le parent de ces deux opinions vous souhaitez basculer.Sans le récipient que vous serez de l'animation de la vue entière au lieu.Assurez-vous que le conteneur ont la même taille que le sous-vues qui va changer.

Exemple:

    [container addSubView:frontView];
    [container addSubView:backView];

    [self.view addSubView:container];

    [UIView transitionFromView:backView toView:frontView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight completion:nil];

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top