Какой хороший способ удалить все подпредставления UIScrollView? - PullRequest
0 голосов
/ 28 ноября 2010

У меня есть представление прокрутки, и мне нужно часто перезагружать содержимое во время работы моего приложения. Прямо сейчас я использую следующую строку кода, чтобы удалить подпредставления перед их повторным добавлением:

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

Должен ли я использовать следующее вместо этого?

scrollView.subviews = nil;

По какой-то причине (первая) строка кода, приведенная выше, приводит к сбою приложения каждые 16 раз. У меня где-то течет память? Следующий метод принимает массив представлений, скроллер (который является константой) и направление.

Edit:

- (void)loadViews:(NSArray *)views IntoScroller:(UIScrollView *)scroller withDirection:(NSString *)direction{
//Set up the scrollView

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

if([direction isEqualToString:@"horizontal"]){
    scrollView.frame = CGRectMake(0, 0, 1024, 768);
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [[NSNumber numberWithUnsignedInt:[views count]] floatValue], scrollView.frame.size.height);
}else if([direction isEqualToString:@"vertical"]){
    scrollView.frame = CGRectMake(0, 0, 1024, 768);
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height * [[NSNumber numberWithUnsignedInt:[views count]] floatValue]);
}

for (int i=0; i<[[NSNumber numberWithUnsignedInt:[views count]] intValue]; i++) {

    [[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view] setFrame:scrollView.frame];

    if([direction isEqualToString:@"horizontal"]){
        [[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view] setFrame:CGRectMake(i * [[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view].frame.size.width, 0, scrollView.frame.size.width, scrollView.frame.size.height)];//CGRectMake(i * announcementView.view.frame.size.width, -scrollView.frame.origin.x, scrollView.frame.size.width, scrollView.frame.size.height)];
    }else if([direction isEqualToString:@"vertical"]){
        [[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view] setFrame:CGRectMake(0, i * [[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view].frame.size.height, scrollView.frame.size.width, scrollView.frame.size.height)];
    }

    [scrollView addSubview:[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view]];
}

}

Ответы [ 2 ]

4 голосов
/ 28 ноября 2010

Первый приведенный вами пример - это правильный способ удаления подпредставлений из UIScrollView.

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

Установка subviews в nil эффективно исключает объект коллекции, управляющий подпредставлениями, тем самым делая невозможным добавление новых подпредставлений.

1 голос
/ 30 ноября 2010

Ниже приведен код для удаления всех вложенных видов из вида прокрутки:

for(UIView *subview in [scrollview  subviews]) 
        {
         [subview removeFromSuperview];

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