1

Je me demandais comment j'allais créer une vue qui persiste à travers toutes les vues et tous les contrôleurs de l'application. De la même manière que Soundcloud le fait avec leur lecteur de musique dans leur application iPhone (voir photo). Peu importe où vous allez dans l'application, la vue du lecteur de musique reste en haut de la barre d'outils.Comment créer une vue qui persiste à travers toutes les autres vues et contrôleurs?

alt text http://i1.soundcloud.com/screenshots-000000000025-akaqgr-t500x500.jpg

Répondre

0

Vous pouvez ajouter une vue comme une sous-vue de la fenêtre principale, et la position au-dessus de votre point de vue tabBarController. Il sera alors toujours visible.

2

La réponse de base consiste à créer une vue en haut de la hiérarchie de vue. Prenons l'exemple de la capture d'écran basée sur une vue tabulaire ci-dessus. Disons que le contrôleur de vue racine pour l'application est une sous-classe de UITabBarController appelée RootViewController.

Normalement, votre délégué d'application aura une méthode qui ressemble à ceci:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    [window addSubview:rootViewController.view]; 
    [window makeKeyAndVisible]; 
} 

Si vous voulez que votre vue juste « chevauchement », c'est simple. Disons que vous voulez que votre "vue persistante" soit de 100 pixels de haut et étire la largeur de l'écran. Supposons que vous ayez déjà créé une classe pour cette vue et qu'elle s'appelle PeristentView. Votre code ressemblerait à quelque chose comme ceci:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    [window addSubview:rootViewController.view]; 

    PersistentView* persistentView = [[PersistentView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; 
    [window addSubview:persistentView]; 
    [persistentView release]; 

    [window makeKeyAndVisible]; 
} 

L'ordre ici est important parce que vous voulez la vue persistante d'être ci-dessous dans la hiérarchie de la vue, de sorte que view du rootViewController attire d'abord, puis la vue persistante tire deuxième .

Si vous souhaitez que la vue persistante "pousse" le reste des vues à l'écran, vous devrez le modifier légèrement. Étant donné que par défaut vous indiquez à la fenêtre d'ajouter l'intégralité de la vue du contrôleur de vue racine en tant que sous-vue, vous devez redimensionner le frame de rootViewController.view afin qu'il ne prenne pas tout l'écran et ne repositionne pas origin.

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    PersistentView* persistentView = [[PersistentView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; 
    [window addSubview:persistentView]; 
    [persistentView release]; 

    CGRect frame = rootViewController.view.frame; 
    frame.size.height -= persistentView.frame.size.height; 
    frame.origin.y += persistentView.frame.size.height; 
    rootViewController.view.frame = frame; 
    [window addSubview:rootViewController.view]; 

    [window makeKeyAndVisible]; 
} 

Je viens de tester cela avec un projet basé bar-onglet existant (en utilisant une plaine UIView au lieu de créer une classe de PersistentView pour amorcer le test) et il fonctionne très bien.

Questions connexes