Удалить подпредставление UIImageview из UIScrollView
Здравствуйте, у меня есть uiscrollview, и у меня есть один объект uiimageview внутри uiscrollview. Я запускаю приложение. затем я прокручиваю вправо в окне прокрутки, и вид прокрутки изменяется, но я не вижу следующий объект 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;
}
}
затем я добавляю следующий объект
[scroll addSubview:imageView];
Я удаляю предыдущий объект, потому что мое приложение вылетает, когда я добавляю 110 изображений в скроллвью, поэтому мне приходится управлять памятью, я думаю. Вот почему я удаляю предыдущий объект.
Кто-нибудь, помогите, пожалуйста!
2 ответа
Несколько предложений, чтобы вы были на правильном пути:
Если вы считаете, что проблема с памятью, разбейте ее на части. Например, добавьте / удалите 10 изображений одновременно.
Свойство tag UIView - ваш лучший друг, когда вы пытаетесь избежать проблем с вашими собственными циклами. Вы можете установить определенный тег для ваших UIImageViews, когда они вам нужны, а затем выполнить поиск тега с помощью [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];
Разве это не то, что вы пытаетесь сделать?