2010-03-26 15 views
0

J'ai une application très simple créée avec le modèle de projet d'application utilitaire sur XCode. Mon MainView a deux composants UIPickerView et deux boutons. Le FlipSideView a un autre UIPickerView.Renversement La transition d'affichage devient maladroite lors de l'utilisation de UIPickerViews avec un grand nombre d'éléments

Les sélecteurs de la vue principale ont chacun 4 segments et chaque segment comporte 8 rangées. Le sélecteur sur le côté de la bascule a juste 1 segment avec 8 rangées. Toutes les lignes sur tous les sélecteurs sont juste du texte.

Avec cette configuration, appuyer sur le bouton pour retourner la vue avant et arrière affiche un délai notable avant que l'animation ne commence, et l'animation semble aller plus vite que ce qu'elle devrait, comme si elle essayait de compenser le temps perdu.

J'ai retiré les sélecteurs dans le constructeur de l'interface et chargé l'application sur le téléphone et l'animation semble maintenant naturelle. J'ai aussi essayé un seul sélecteur (le flipside) et les choses semblent toujours normales. Donc, ma théorie actuelle est que le nombre d'objets impliqués dans la vue principale est la cause. Le fait est que je ne pense pas que ce soit beaucoup (4 x 8 x 2 = 64), mais je pourrais me tromper complètement. C'est à peu près ma première application alors peut-être que je fais juste quelque chose de grossièrement faux, ou peut-être que le téléphone a un traitement beaucoup plus limité que je pensais.

Je pense à créer des vues de sélecteur avec pickerView: viewForRow: forComponent: réutilingView: pour voir si cela fonctionne mieux, mais je ne suis pas sûr que ce soit juste une perte de temps.

Des suggestions?

Merci Ruy

P.S .: Test sur un téléphone 3G 3.1.2

Répondre

0

Le nombre de lignes et de composants a peu à voir avec la performance du point de vue du sélecteur lui-même. Les vues Picker fonctionnent comme des tableaux, elles n'ont pas réellement le nombre de composants et de lignes en mémoire. Au lieu de cela, ils échangent et réutilisent la même poignée de vues affichées à l'écran en même temps. Ainsi, si vous avez 4 composants qui affichent chacun 5 lignes à la fois, la vue du sélecteur ne contient jamais plus de 20 vues même si vous avez des centaines de lignes logiques dans chaque composant.

Par conséquent, le nombre d'éléments logiques dans la source de données de la vue sélecteur est sans importance pour ses performances visuelles. Je ne suis pas exactement sûr de ce que vous voyez avec les vues du sélecteur et de la transition, mais il est très probable que cela soit dû au fait que votre code personnalisé charge et configure la vue du sélecteur. Je définirais des points d'arrêt/journaux pour voir où il passe son temps pendant la transition.

+0

Il n'y a vraiment pas beaucoup de choses à faire pour mettre en place la vue flipside. Sur l'action du contrôleur de la vue principale lorsque le bouton est enfoncé, il y a: - (IBAction) showInfo { FlipsideViewController * controller = [[alloc FlipsideViewController] initWithNibName: @ faisceau "FlipsideView": nil]; \t controller.delegate = self; \t \t controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; \t [self presentModalViewController: contrôleur animé: OUI]; \t \t [version du contrôleur]; } Et puis il n'y a rien d'autre sur le Flipside viewDidLoad autre que de définir la couleur de fond. –