Удалить подпредставление 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 ответа

Решение

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

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

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

  3. 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];

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

Другие вопросы по тегам