2014-11-01 5 views
0

Я добавил около 500 просмотров на мой viewController.view. Это действие заняло около 5 секунд. Теперь я хочу, чтобы экран обновлялся после каждого добавляемого subview, поэтому пользователь увидит их поочередно на экране.setNeedsDisplay не работает после добавления subviews

Я попробовал это в моем ViewController:

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    for(int i=0; i<500; i++) 
    { 
     //...Create aView 
     [self.view addsubview:aView]; 
     [self.view setNeedsDisplay]; 
    } 
} 

я запускаю его и ничего не произошло в течение 5 секунд, а затем все виды появились сразу. Я убедился, что [self.view setNeedsDisplay] вызван из контекста основного потока.

Любая идея, как сделать эти подпрограммы появляться по одному?

+0

Вы, вероятно, следует прочитать документацию по 'setNeedsDisplay'. Это не значит перерисовать, и не должно. –

+1

В зависимости от того, какой визуальный эффект вы пытаетесь сделать, таймеры, циклы запуска и анимации - другие хорошие темы для исследования. –

ответ

0

Я нашел простое решение. Я добавил новое свойство к моему ViewController - ведьма «subviewsCount» был инициализирован до 500. Затем вызывается следующий метод из viewDidLoad:

-(void) addSubviewsToMotherView 
{ 
    self.subviewsCount -=1; 
    if (self.subviewsCount >= 0) 
    { 
     [UIView animateWithDuration:0.0 
           delay:0.0 
          options:UIViewAnimationOptionLayoutSubviews 
         animations:^{ 
          [self methodToAddSubview]; 
         } 
         completion:^(BOOL finished){ 
          [self addSubviewsToMotherView]; 
         } 
     ]; 

    } 
}