2010-11-07 4 views
0

Je mets ensemble une application iPad qui permet à un utilisateur de se frayer un chemin à travers une visite virtuelle. Ils sont capables d'avancer à travers les écrans sur lesquels certains auront des boutons à d'autres matériaux tels qu'une vidéo ou plus d'infos.Contrôleurs à vues multiples. Y a-t-il un maximum?

Si Keynote prend en charge les liens hypertexte, alors ce serait bien adapté, mais comme ce n'est pas le cas, j'essaie de recréer le tour dans Xcode. Je suis un débutant, mais j'ai passé du temps à faire des recherches et à avoir du code pour afficher les «diapositives» et la capacité d'avancer et de reculer. Les diapositives ne sont plus qu'une vue d'image avec un graphique en plein écran et des boutons pour les différentes options, certaines diapositives sont simples et n'ont rien d'autre que vers l'arrière et vers l'avant, mais d'autres auront des liens supplémentaires

Cependant, le faire de manière simpliste signifie que je me retrouve avec un grand nombre de contrôleurs de vue et de fichiers XIB, actuellement à 75, qui, je sais, doit être plus que n'importe quelle application devrait avoir. Cependant, cela fonctionne même si lors de l'exécution sur l'appareil et non dans le simulateur, il sera bombardé.

Mes questions sont il ya une limite au nombre de contrôleurs de vue dans une application et aura un grand nombre cause l'instabilité? Je connais d'autres façons de manipuler les vues, comme les avoir dans des tableaux et de les faire sortir par un seul contrôleur de vue, mais cela ne me donne pas la possibilité d'adapter des diapositives à des contenus différents.

Je serais heureux de l'aide ou des conseils et j'espère avoir passé au sujet de l'affichage de cette question de la bonne façon (ses) mes premiers

Merci beaucoup Kieron

Le code que je utilise pour manipuler le vue est

-(IBAction)goBack { 
    [self dismissModalViewControllerAnimated:NO]; 
} 

-(IBAction)goForward { 
    Slide5ViewController *screen = [[Slide5ViewController alloc] initWithNibName:nil bundle:nil]; 
    screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:screen animated:YES]; 
    [screen release]; 
} 

Répondre

4

Kieron,

Pourquoi ne pas avoir un contrôleur de vue "slide" et une autre image uniquement? Utilisez une sorte de structure de données pour conserver des informations sur les boutons, les images et les chemins de chaque diapositive, puis continuez à réutiliser le même contrôleur de vue pour chaque diapositive.

Le contrôleur de vue peut ensuite charger dynamiquement chaque image lors de la transition entre la vue actuellement visible et l'instanciation suivante de lui-même ... Cela devrait être possible en utilisant seulement 1 contrôleur de vue.

Si vous êtes à l'aise avec Interface Builder, continuez à utiliser les fichiers XIB pour tout mettre en page. Toutefois, au lieu de définir chaque "propriétaire du fichier" sur un contrôleur de vue différent, définissez-les tous sur le même. Puis, à l'intérieur de vos méthodes IBAction (lorsque l'utilisateur appuie sur un bouton), utilisez une logique pour dire "Je suis sur cette vue en ce moment, et l'utilisateur a appuyé sur ce bouton, alors lequel dois-je aller à la prochaine?"

Ensuite, appelez une méthode comme loadNewSlide: qui pourrait ressembler à ceci:

- (void) loadNewSlide:(NSInteger)slideNumber 
{ 
    // Make a string with the new XIB name 
    NSString* xibName = [NSString stringWithFormat:@"slide-%d",slideNumber]; 

    // Create the next slide view controller (it doesn't matter if you create a slide view 
    // controller from within another slide view controller, remember, they are all just 
    // objects) 
    SlideViewController *newSlideViewController = [[SlideViewController alloc] initWithNibName:xibName bundle:nil]; 

    // Change the view 
    UIWindow *theWindow = [self.view superview]; 
    [self.view removeFromSuperview]; 
    [theWindow addSubview:newSlideViewController.view]; 

    // Release, the view stack now should be retaining the view controller instead 
    [newSlideViewController release]; 
} 

Cela fonctionne beaucoup mieux que de courir « modalement » avec 75 contrôleurs de vue (comme vous l'aviez suggéré précédemment) car cela ne conserverons 1 diapositive dans la mémoire à la fois - tout ce que vous êtes en train de regarder - et ensuite charger la diapositive suivante juste à temps pour y accéder.

+0

Salut, merci. J'ai pensé à cette route, mais étant nouveau, il était plus facile de descendre la route que j'ai, même si je sais que c'est un vrai truc de base. Si je prends votre route, comment pourrais-je gérer les propriétés uniques d'une diapositive en particulier. Par exemple, une diapositive montrera une image d'une machine et cliquer sur une partie particulière de cette machine vous amènera à une vue plus détaillée et à partir de là à un film montrant qu'il fonctionne. Actuellement, j'utilise Interface Builder comme visuellement très facile à utiliser mais aurais-je besoin de le vider et de tout faire par programmation? – Bluearms

+0

Merci pour votre aide. Je vais aller de l'avant et mettre en œuvre vous suggérez. Meilleures salutations – Bluearms

0

Fist de tous, quelle erreur est dans le journal?

Avez-vous implémenté correctement la méthode viewDidUnload des contrôleurs de vue? Les contrôleurs de vue devraient être en mesure de décharger xib chargé. En outre, publiez des données dans didReceiveMemoryWarning. Deuxièmement, il pourrait être préférable d'utiliser UINavigationController pour gérer la pile des contrôleurs de vue au lieu de la pile des contrôleurs de vue modale. Vous pouvez masquer la barre de navigation ou la personnaliser.

+0

Vous avez mentionné des choses que je ne fais pas actuellement donc je vais aller les rechercher. Merci pour les pointeurs. – Bluearms

Questions connexes