Удалить подпросмотр UIImageView из UIScrollView
Вопрос
Здравствуйте, у меня есть uiscrollview, и у меня есть один объект uiimageview внутри uiscrollview.Я запускаю приложение.затем я прокручиваю вправо scrollview, и scrollview изменяется, но я не вижу следующий объект uiimageview, который я добавляю в - (void)scrollViewDidEndDecelerating:(UIScrollView *)ScrollView .перед добавлением следующего объекта я удаляю предыдущий...что не так?
чтобы удалить объект, я использую
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:просмотр изображения];
Я удаляю предыдущий объект, потому что мое приложение выходит из строя, когда я добавляю 110 изображений в scrollview, поэтому, я думаю, мне нужно управлять памятью.Вот почему я удаляю предыдущий объект.
Кто-нибудь, помогите, пожалуйста!
Решение
Пара советов, которые помогут вам встать на правильный путь:
Если вы считаете, что проблема с памятью, разбейте проблему на разделы.Например, добавляйте / удаляйте 10 изображений одновременно.
Свойство tag UIView - ваш лучший друг, когда вы пытаетесь избежать проблем с вашими собственными циклами.Вы можете установить определенный тег для своих UIImageViews, когда они вам понадобятся, а затем выполнить поиск по тегу с помощью [UIView viewWithTag:tag];Это работает рекурсивно.
st3fan поднимает очень хороший вопрос о параллельной модификации.В общем, хороший способ избежать этого - добавить в "массив удаления", а затем removeObjectsInArray .
Другие советы
Первая проблема, которую я вижу, заключается в том, что вы зацикливаетесь на массиве, одновременно изменяя его.Также ваш ko
индекс цикла нигде не используется.Вы всегда берете элемент 0.
О чем:
NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
[view removeFromSuperview];
}
}
[subviews release];
Разве это не именно то, что вы пытаетесь сделать?