2010-10-24 5 views
1

Je travaille sur une application qui met à jour à la fois un UITableView et un UIScrollView. J'aime comment fonctionne la mise à jour UITableView. Lorsque j'ajoute, supprime ou met à jour des éléments, j'appelle insertRowsAtIndexPaths:withRowAnimation:, reloadRowsAtIndexPaths:withRowAnimation: et deleteRowsAtIndexPaths:withRowAnimation: selon le cas. Cependant, la mise à jour de UIScrollView s'est révélée plus difficile.Comment ajouter dynamiquement des images à un UIScrollView?

Alors, comment puis-je le faire? Mon UIScrollView contient des images, et je veux être capable d'insérer, de mettre à jour et de supprimer des images individuelles - avec animation - de manière efficace et fluide, et peut-être dans un ordre aléatoire. Comment fait-on ce genre de chose?

À titre d'exemple, j'ai le code comme ceci dans ma mise en œuvre de UIScrollViewDelegate pour ajouter une nouvelle image:

if (newImageindex == currentImageIndex) { 
    [scrollView setNeedsDisplay]; 
    [scrollView setContentOffset:portalView.contentOffset animated:YES]; 
} else if (newImageIndex < currentImageIndex) { 
    currentImageIndex++; 
    CGPoint offset = portalView.contentOffset; 
    offset.x += portalView.frame.size.width; 
    portalView.contentOffset = offset; 
} 

Ceci est proche, je pense, mais pas tout à fait raison. Je finis avec les images ajoutées, mais l'UIScrollView semble faire défiler jusqu'à une position avant la première image dans la vue. Si je commence à le faire défiler à la main, la première image apparaît. C'est comme si on faisait défiler la position -1 dans mes images.

L'exemple peut ne pas aider à mettre en évidence mon problème beaucoup, mais c'est sûrement un besoin commun de redéclencher dynamiquement les images apparaissant dans un UIScrollView. Quel est l'état de l'art à ce sujet?

Répondre

0

UIScrollView n'est pas aussi spécialisé et structuré qu'un UITableView. La première est une vue générique qui fait défiler et zoomer tout ce que vous y mettez, et vous pouvez y placer des sous-vues n'importe où, alors que cette dernière est faite spécialement pour afficher des listes de cellules empilées les unes sur les autres.

Donc la réponse est: vous devez animer vous-même les sous-vues dans le scrollview. Il existe différentes bibliothèques comme Three20 qui fournissent des cadres pour créer des vues plus avancées, vous devez utiliser un composant approprié de l'un de ceux-ci ou faire le vôtre.

+0

Merci. C'est en fait ce que j'ai fait. Cependant, il m'a fallu des mois pour bien faire les choses. Franchement, ce n'est probablement pas encore tout à fait raison. Mais ça marche assez bien pour le moment. Je prévois d'ajouter ma propre réponse ici une fois que je suis complètement satisfait de la solution. Pas encore là, hélas. – theory

Questions connexes