Удалить подпредставление UIImageview из UIScrollView - PullRequest
3 голосов
/ 23 января 2010

Здравствуйте, у меня есть 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 ]

2 голосов
/ 26 января 2010

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

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

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

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

2 голосов
/ 23 января 2010

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

А как же:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...