2010-04-23 5 views
7

Je dois créer une vue sur l'iPhone qui défile horizontalement à travers une galerie d'images. Le problème est que cette galerie a le potentiel d'avoir 100s à 1000s d'images qui doivent être présentées, donc je voudrais éviter de les charger tous dans un seul UIScrollView à la fois et de détruire les performances. J'ai besoin de créer une vue qui recycle les objets de vue (comme UITableView) pour augmenter les performances et réduire les frais généraux de mémoire, mais il faut faire défiler horizontalement.Table de défilement horizontale iPhone

Des idées? Est-il possible de rendre horizontalable l'opération UITableView?

Merci!

Répondre

1

Vous pouvez utiliser une grande fenêtre de défilement et surveiller la position de défilement à modifier. Vous pouvez ajouter des images en tant que sous-vues lorsqu'elles arrivent dans la zone d'affichage réelle et les supprimer au fur et à mesure qu'elles sont déplacées. De cette façon, il suffit d'avoir un petit nombre de vues d'image présentes à un moment donné, mais vous donnez l'apparence qu'elles sont toutes "là".

Vous pouvez même recycler les vues d'image en changeant leur image et leur emplacement afin de ne pas créer et détruire des objets complexes. C'est ce que fait UITableView avec les cellules.

+0

Merci pour les pensées. J'espérais qu'il y aurait un moyen d'utiliser un mécanisme de recyclage dans le système d'exploitation, et ne pas avoir à gérer tout cela dans mon propre code ... mais je vais faire quelques tentatives avec cela et voir comment il fonctionne. – Devunwired

+0

Il y a une façon d'utiliser un UITableViewController, s'il vous plaît consulter ma réponse ci-dessous –

0

Est-il possible d'ajouter un UITableView horizontalement? Dans une orientation différente de l'écran. Vous pouvez ensuite utiliser une sémantique UITableView régulière où chaque ligne est une image qui défile horizontalement plutôt que verticalement.

-1

je pense avoir la réponse pour vous par le défilement d'une UITableView Horizontalement:

  1. créer un UIScrollView (et désactiver le défilement vertical)
  2. mettre un UITableView à l'intérieur du rouleau vue
  3. changement la largeur de la vue de table comme vous souhaite et met à jour le UIScrollView.contentSize en tant que tableView width
+0

L'ajout d'une vue de table ne le fait pas défiler horizontalement indépendamment de la largeur. – David

2

Il est aussi simple qu'appyler une transformation.

Voici le code. Écrire ceci dans le votre tableViewController INIT:

self.view.frame = CGRectMake(100,-5,250,350); //any Frame of your choice 
CGAffineTransform trans = self.view.transform; // get current transform (i.e. portrait) 
trans = CGAffineTransformRotate(trans, (M_PI/-2.0)); // rotate 90 degrees to go landscape 
self.view.transform = trans; // set current transform (landscape) 

Mais maintenant ce que vous devez réaliser est que votre axe sont permutées. Toute modification apportée à la hauteur changera la largeur (et vice versa) et toute modification apportée à l'origine.x changera l'origine.y (et vice versa)

+1

Vous voulez "par exemple" pas "ie" - De [Wikipedia] (http://en.wikipedia.org/wiki/List_of_Latin_abbreviations): "par exemple" est "exempli gratia" ("par exemple", "par exemple") "ie" est "id est" ("c'est", "en d'autres termes") – Thromordyn

+0

Excuses. Ma faute. Merci pour la correction @Thromordyn –

0

Poster une réponse à cette ancienne discussion parce que la réponse validée n'est pas correcte. Vous pouvez utiliser un UITableViewController et ses fonctionnalités intégrées dequeueReusableCellWithIdentifier.

L'astuce consiste à faire pivoter votre vue de table, puis à faire tourner la cellule dans la direction opposée.

à viewDidLoad vous ajouterez:

self.view.transform = CGAffineTransformMakeRotation(-M_PI_2); 

Et puis à cellForRowAtIndexPath vous utilisez:

cell.containerView.transform = CGAffineTransformMakeRotation(M_PI_2); 

Assurez-vous que chaque contenu de votre cellule est ajoutée à une vue du conteneur (dans cet exemple containerView) de sorte que vous devez seulement faire pivoter le conteneur et pas toutes les sous-vues de cellules.

Veuillez également noter que cela fonctionnera mieux avec des cellules ayant des dimensions carrées, sinon vous risquez de rencontrer des difficultés avec le calcul hauteur/largeur.

Questions connexes