Supprimer la sous-vue UIImageview de UIScrollView
Bonjour, j'ai un uiscrollview et j'ai un objet de uiimageview à l'intérieur de la uiscrollview.
J'ai démarrer l'application. puis j'ai faites défiler vers la droite à la scrollview et la scrollview changements, mais je ne peux pas voir le prochain uiimageview objet que j'ajoute à l' - (void)scrollViewDidEndDecelerating:(UIScrollView *)le scrollView . avant que je ajouter l'objet suivant j'ai supprimer le précédent...ce qui est faux?
de supprimer l'objet-je utiliser
UIImageView *l;
for (NSInteger ko=0; ko<[[scroll subviews] count]; ko++){
if ([[[scroll subviews] objectAtIndex:0] isKindOfClass:[UIImageView class]]){
//This code never gets hit
l=[[scroll subviews] objectAtIndex:0];
[l removeFromSuperview];
l=nil;
}
}
puis-je ajouter de l'objet suivant
[scroll addSubview:imageView];
- Je supprimer l'objet précédent, parce que mon application plante lorsque je ajouter 110 images à la scrollview donc je dois gérer la mémoire, je suppose. C'est pourquoi j'ai supprimer l'objet précédent.
Quelqu'un aider s'il vous plaît!
OriginalL'auteur stefanosn | 2010-01-23
Vous devez vous connecter pour publier un commentaire.
Un couple de suggestions pour vous mettre sur la bonne voie:
Si vous croyez que la mémoire est un problème, partition le problème. Par exemple, ajouter/supprimer des 10 images à la fois.
La propriété tag de UIView est votre meilleur ami quand vous essayez d'éviter de maintenir des problèmes avec vos propres boucles. Vous pouvez définir une balise spécifique pour votre UIImageViews lorsque vous en avez besoin, et ensuite, la recherche de la balise à l'aide de [UIView viewWithTag:tag]; Il fonctionne de manière récursive.
st3fan apporte un très bon point sur les modifications simultanées. En général un bon moyen de l'éviter est d'ajouter à une "suppression de la matrice de" et ensuite removeObjectsInArray.
OriginalL'auteur David Sowsy
Premier problème que je vois est que vous êtes en boucle sur un tableau tout en le modifiant. Aussi votre
ko
indice de boucle n'est pas utilisé n'importe où. Vous avez toujours saisir l'élément 0.Ce sujet:
N'est pas exactement ce que vous essayez de faire?
L'ordre des sous-vues est vraiment pas pertinent, et vous ne devriez pas compter sur elle. Il n'y a pas de relation entre l'indice de la sous-vue de défilement.les sous-vues et sa position réelle. Si c'est ce que vous voulez, alors je vous suggère de garder votre propre réseau de points de vue aussi, et assurez-vous qu'ils sont dans l'ordre d'affichage.
St3fan, ne relâchez pas les sous-vues. NSArray arrayWithArray: retourne un autoreleased tableau. Lors de votre événement boucle et la libération de la piscine essaie de libérer des sous-vues, il sera déjà parti et de votre application crash.
David, je ne pense pas que ça va se produire. Ce que mon code est le suivant: Le sous-vues tableau (qui est un variable, de ne pas être confondu par de défilement.les sous-vues) tiendra conservé des références aux éléments de défilement.les sous-vues. Il va demander à ceux qui sont UIImageViews pour supprimer lui-même à partir de la superview (le défilement de l'affichage). Puis elle va sortir du tableau temporaire et qui fera la
removed
des sous-vues parvenir à conserver un nombre de 0, après quoi ils seront libérés. La raison de cette façon de faire est que vous ne pouvez pas vous passer en boucle de défilement.les sous-vues et aussi le modifier. Vous avez besoin d'un temp de tableau.Je crois que la première ligne pourrait être simplement: NSArray *des sous-vues = défilement.les sous-vues;
OriginalL'auteur Stefan Arentz