2010-01-23 3 views
3

Привет, у меня есть uiscrollview, и у меня есть один объект uiimageview внутри uiscrollview. Я запускаю приложение. затем я прокручиваю вправо в scrollview и изменения scrollview, но я не вижу следующий объект uiimageview, который я добавляю в - (void) scrollViewDidEndDecelerating: (UIScrollView *) scrollView. перед тем, как добавить следующий объект, я удалю предыдущий ... что не так?Удалить subview UIImageview от UIScrollView

, чтобы удалить объект я использовать

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 изображений в scrollview, поэтому мне нужно управлять памятью, я думаю. Вот почему я удаляю предыдущий объект.

Помогите пожалуйста!

ответ

2

Несколько предложений, чтобы вы на правильном пути:

  1. Если вы считаете, что память является проблемой, разметить на эту проблему. Например, добавьте/удалите 10 изображений за раз.

  2. Свойство тега UIView - ваш лучший друг, пытаясь избежать проблем с вашими петлями. Вы можете установить определенный тег для своих UIImageViews, когда они вам понадобятся, а затем выполнить поиск тега с помощью [UIView viewWithTag: tag]; Он работает рекурсивно.

  3. st3fan поднимает очень хороший момент о параллельной модификации. В общем, хорошим способом избежать этого является добавление к «массиву удаления», а затем удаление объекта ObjectsInArray.

2

Первая проблема, которую я вижу, заключается в том, что вы перебираете массив, а также изменяете его. Также ваш индекс ko нигде не используется. Вы всегда захватить пункт 0.

насчет:

NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews]; 
for (UIView* view in subviews) { 
    if ([view isKindOfClass:[UIImageView class]]) { 
     [view removeFromSuperview]; 
    } 
} 
[subviews release]; 

Разве это не то, что вы пытаетесь сделать?

+0

Я не хочу удалять все объекты. В области uiscrollview есть объект в месте 0. Я хочу удалить первый объект, потому что хочу добавить другое. новый объект должен быть помещен в 1 место не на 0, потому что я уже прокрутил с места 0 до места 1. Если я не удаляю предыдущий объект после того, как я добавлю более 45 изображений в uiscrollview, приложение вылетает из-за проблема с памятью. Мне нужно удалить предыдущий объект в свободную память. – stefanosn

+0

Порядок подзаголовков действительно не имеет значения, и вы не должны зависеть от него. Между индексом subview в scroll.subviews и его фактическим положением нет никакой связи. Если это то, что вы хотите, я предлагаю вам также сохранить собственный массив представлений и убедиться, что они находятся в порядке отображения. –

+0

St3fan, не отпускать подпункты. NSArray arrayWithArray: возвращает автореализованный массив. Когда цикл событий завершается, и пул релизов пытается освободить subviews, он уже исчезнет, ​​и ваше приложение выйдет из строя. –

Смежные вопросы