[Ios] Animer removeFromSuperview


Answers

Si vous ciblez iOS 4.0 vers le haut, vous pouvez utiliser des blocs d'animation à la place:

[UIView animateWithDuration:0.2
     animations:^{view.alpha = 0.0;}
     completion:^(BOOL finished){ [view removeFromSuperview]; }];

(Le code ci-dessus provient de la documentation UIView d' Apple )

Question

Je voudrais animer la transition d'une sous-vue à la super vue.

J'affiche la sous-vue en utilisant:

[UIView beginAnimations:@"curlup" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
[self.view addSubview:self.mysubview.view];
[UIView commitAnimations];

Ce qui précède fonctionne bien. Cela revient à la super vue que je n'ai pas d'animation:

[UIView beginAnimations:@"curldown" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
[self.view removeFromSuperview];
[UIView commitAnimations];

Y a-t-il quelque chose de différent que je devrais faire pour que la sous-vue s'anime lorsqu'elle est supprimée?




Bien que l'approche avec l'envoi removeFromSuperview message removeFromSuperview partir du bloc d'achèvement de l'animation fonctionne removeFromSuperview dans la plupart des cas, il est parfois impossible d'empêcher une vue de removeFromSuperview immédiatement la hiérarchie des vues.

Par exemple, MKMapView supprime ses sous-vues après avoir reçu le message removeAnnotations , et il n'y a pas d'alternative "animée" pour ce message dans l'API.

Néanmoins, le code suivant vous permet de faire ce que vous voulez avec un clone visuel d'une vue après qu'elle a été retirée de superview ou même désallouée:

UIView * snapshotView = [view snapshotViewAfterScreenUpdates:NO];
snapshotView.frame = view.frame;
[[view superview] insertSubview:snapshotView aboveSubview:view];

// Calling API function that implicitly triggers removeFromSuperview for view
[mapView removeAnnotation: annotation];

// Safely animate snapshotView and release it when animation is finished
[UIView animateWithDuration:1.0
                     snapshotView.alpha = 0.0;
                 }
                 completion:^(BOOL finished) {
                     [snapshotView removeFromSuperview];
                 }];



Links