UIScrollView からサブビュー UIImageview を削除します
質問
こんにちは、私は uiscrollview を持っており、uiscrollview 内に uiimageview のオブジェクトが 1 つあります。アプリを起動します。次に、スクロールビューで右にスクロールすると、スクロールビューが変わりますが、 (void)scrollViewDidEndDecelerated:(UIScrollView *)scrollView に追加する次の uiimageview オブジェクトが表示されません。次のオブジェクトを追加する前に、前のオブジェクトを削除します...何が問題ですか?
使用しているオブジェクトを削除するには
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;
}
}
次に、次のオブジェクトを追加します
[スクロール addSubview:imageView];
スクロールビューで 110 枚の画像を追加するとアプリがクラッシュするため、前のオブジェクトを削除しました。メモリを管理する必要があると思います。これが、前のオブジェクトを削除する理由です。
誰か助けてください!
解決
正しい方向に進むためのいくつかの提案:
メモリに問題があると思われる場合は、問題を分割してください。たとえば、一度に 10 枚の画像を追加/削除します。
UIView の tag プロパティは、独自のループでのメンテナンスの問題を回避する場合に最適です。必要なときに UIImageView に特定のタグを設定し、[UIView viewWithTag:tag] を使用してタグを検索できます。再帰的に機能します。
st3fan は、同時変更について非常に良い点を指摘しています。一般に、これを回避する良い方法は、「削除配列」に追加してから、ObjectsInArray を削除することです。
他のヒント
私が見る最初の問題もそれを修正しながら、あなたは、配列をループしていることです。また、あなたのko
ループインデックスはどこにも使用されていません。あなたは常にグラブアイテム0ます。
何について:
NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
[view removeFromSuperview];
}
}
[subviews release];
?あなたがやろうとしている正確に何ということはないです