2010-03-16 5 views
1

je la vue suivante hiérarchieiPhone: Animer une vue quand une autre vue apparaît/disparait

UITabBarController - UINavigationController - UITableViewController

Lorsque le tableau apparaît, (animée) je crée une barre d'outils et l'ajouter comme sous-vue du TabBar au bas de la page et laissez-le animer avec la vue de la table. Même procédure dans l'autre sens, lorsque la vue de la table disparaît.

Cela ne fonctionne pas comme prévu.

  • La durée de l'animation est OK, mais en quelque sorte pas exact la même chose que l'animation de la vue de la table quand il devient visible
  • Quand j'afficher la vue de table pour la deuxième fois, la barre d'outils ne disparaît pas du tout et reste au bas de la vue parent .

Qu'est-ce qui ne va pas?

- (void)animationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    UIView *toolBar = [[[self tabBarController] view] viewWithTag:1000]; 
    [toolBar removeFromSuperview]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 44, 0); 
    [[self tableView] setContentInset:insets]; 
    [[self tableView] setScrollIndicatorInsets:insets]; 
    // Toolbar initially placed outside of the visible frame (x=320) 
    UIView *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(320, 480-44, 320, 44)]; 
    [toolBar setTag:1000]; 
    [[[self tabBarController] view] addSubview:toolBar]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:0.35]; 
    [toolBar setFrame:CGRectMake(0, 480-44, 320, 44)]; 
    [UIView commitAnimations]; 
    [toolBar release]; 

    [super viewWillAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    UIView *toolBar = [[[self tabBarController] view] viewWithTag:1000]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:0.35]; 
    [UIView setAnimationDidStopSelector:@selector(animationDone:finished:context:)]; 
    [toolBar setFrame:CGRectMake(320, 480-44, 320, 44)]; 
    [UIView commitAnimations]; 

    [super viewWillDisappear:animated]; 
} 

Répondre

0

Avez-vous essayé d'utiliser la propriété toolbarItems du contrôleur de vue de table? UINavigationController va gérer une barre d'outils pour vous, en la mettant à jour avec les éléments de la barre d'outils de son contrôleur de vue supérieur; utilisez la méthode -setToolbarHidden:animated: dans votre -viewWillAppear: et -viewWillDisappear: pour contrôler la visibilité de cette barre d'outils.

+0

Vous voulez dire la barre d'outils du contrôleur de navigation, n'est-ce pas? J'ai besoin d'une autre barre d'outils en bas de la table, mais elle ne doit pas être déplacée avec le contenu de la table lors du défilement vers le haut et vers le bas. Dans le code ci-dessus, j'expérimente un peu l'animation mais la barre d'outils ne devient visible que lorsque la table est en mode édition. Hmmm ... une fois de plus un UIViewController en tant que "conteneur" pour UITableViewController pourrait être une solution. – MacTouch

+1

OK, résolu en utilisant un simple UIViewController au lieu de UITableViewController. Cela ressemble à l'exemple suivant: http://iphonedevelopment.blogspot.com/2008/10/table-view-multi-row-edit-mode.html – MacTouch

Questions connexes