2013-07-26 8 views
1

У меня есть PlayPageViewController как rootViewController. PlayPageViewController отобразит 3D-модели и UIImages в вызове метода editPages(), что займет несколько секунд, чтобы подождать.IOS, когда UIView полностью загружен

Я просто хочу добавить loadView при запуске и когда PlayPageViewController будет полностью загружен, он исчезнет.

Вот мое решение:

  1. Добавить loadingView с activityIndicator.
  2. Когда loadingView загружается, я начну реализовывать

, но, кажется, он не работает

STLoadingViewController *loadingView = 
    [[STLoadingViewController alloc]initWithNibName:@"STLoadingViewController" 
               bundle:nil]; 
    loadingView.view.frame=CGRectMake(0, 0, 1024, 768); 
    [self.view insertSubview:loadingView.view atIndex:3]; 

    if(loadingView.isViewLoaded && loadingView.view.window) 
    { 
     [self.view insertSubview:self.playPageViewController.view atIndex:4]; 
     [self.playPageViewController setEditingPage:pageIndex]; 
     [loadingView.view removeFromSuperview]; 
    } 
+0

Не могли бы вы добавить немного больше контекста? Где выполняется вышеуказанный код? Вы загружаете свою модель в фоновом режиме или в основной поток? Как точно выглядит настройка вашего контроллера вида? Apple предлагает отображать образ заполнителя и загружать контент в фоновом режиме, чтобы ваше приложение всегда реагировало. – Paul

+0

1.Этот код выполнен в ViewLoad() в корневом контролере 2. Я думаю, что загрузил модель в основном потоке, почему она длилась несколько секунд. настройка моего viewController только нового изображения, просмотра модели и добавления их в self.view, вот и все. Кстати, как я могу загрузить модель в backgroud –

ответ

0

Что такое метод ViewLoad()? Вы имеете в виду viewDidLoad:? Вы можете настроить все свои представления в раскадровке, включая представление, содержащее индикатор активности. Не загружайте модель в этот момент, но подождите, пока не вызывается viewDidLoad:. На этом этапе вы можете использовать Grand Central Dispatch, чтобы начать загрузку модели. Это могло бы выглядеть примерно так:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    // You need to setup the activity indicator outlet in the storyboard 
    [_activityIndicator startAnimating]; 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     // Do the expensive work on the background 
     [NSThread sleepForTimeInterval:5.0f]; 
     // All UI related operations must be performed on the main thread! 
     dispatch_async(dispatch_get_main_queue(), ^{\ 
      // Replace the view containing the activity indicator with the view of your model. 
      [_activityIndicator stopAnimating]; 
      NSLog(@"STOP"); 
     }); 
    }); 
} 

Редактировать: ссылка, похоже, не работает. Вероятно, это связано с текущими проблемами с Dev Center. Документацию можно найти в панели документации Xcode Organizer.

1

Вы должны сделать свои соответствующие методы для вызова в viewDidAppear методе, когда это метод называется, все возникающие задачи были закончены.

Смежные вопросы