Вопрос

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

Кто-нибудь, помогите, пожалуйста!

Это было полезно?

Решение

Пара советов, которые помогут вам встать на правильный путь:

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top