2010-04-11 5 views
3

J'ai un UIScrollView qui affiche une liste de données. À l'heure actuelle, lorsque l'utilisateur ajoute un élément à la liste, je peux étendre la taille du contenu de UIScrollView et faire défiler vers le bas en utilisant setContentOffset et YES pour animer.Rafraîchir UIScrollView/Animation, timing (Objective-C)

Lorsque l'utilisateur supprime un élément de la liste, je souhaite redimensionner la taille du contenu de l'UIScrollView et faire défiler une étape de manière animée.

Comment puis-je commander correctement? En ce moment, si je redimensionne la taille du contenu avant de faire défiler vers le haut, le défilement n'est pas animé.

J'ai essayé de faire défiler vers le haut avant de redimensionner la taille du contenu, mais cela n'a pas encore donné une transition en douceur.

Existe-t-il un moyen de terminer l'animation de défilement AVANT de redimensionner la taille du contenu?

Merci

Répondre

4

Oui, vous devez appeler la méthode pour redimensionner votre contenu après l'animation de la vue déroulante est terminée. Vous pouvez le faire dans la méthode scrollViewDidEndScrollingAnimation: du délégué de la vue déroulante. Définissez votre contrôleur en tant que délégué et implémentez cette méthode.

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { 
    [scrollView setContentSize: newSize]; 
} 

Vous n'avez pas besoin d'une minuterie ou d'une vue tabulaire pour cela.

1

Je pense que vous devriez utiliser UITablView pas UIScrollView.

Dans UITableView, vous pouvez implémenter la fonctionnalité d'actualisation.

en utilisant une ligne de code:

[tblView reloadData]; 
0

Une chose que vous pouvez faire est d'utiliser une minuterie. Si je comprends bien, vous voulez faire ceci:

  1. Faites défiler jusqu'à nouvelle fenêtre
  2. Supprimer l'élément de la liste
  3. Resize taille du contenu

Vous pouvez le faire comme ceci:

[scrollView setContentOffset:... animated:YES]; 
[NSTimer scheduledTimerWithTimeInterval:SECONDS_AS_FLOAT target:self selector:@selector(timerCallback:) userinfo:nil repeats:NO]; 

- (void)timerCallback:(NSTimer *)timer { 
    // remove item from list at this point 
    ... 
    // set new content size 
    [scrollView setContentSize]; 
} 

Vous devez expérimenter pour voir quel est le bon temps SECONDS_AS_FLOAT à utiliser, il devrait être légèrement plus que le rouleau durati sur. Ce sera de l'ordre de quelques centaines de millisecondes, donc vous pouvez expérimenter avec une valeur comprise entre 0,2 et 0,5.