2014-05-02 1 views
0

Представьте себе такой сценарий (некоторый код ниже):Лаг/Задержка ModalViewController уволиться после загрузки с видом XIb над SKView

  1. У меня есть SKView на ViewController.
  2. Я загружаю xib-просмотр (внешний .xib-файл) поверх skview (вид xib - это похоже на небольшое меню, которое не покрывает экран полностью).
  3. Затем я показываю контроллер вида по модулю от контроллера SKView
  4. Когда я отклоняю этот модальный контроллер, есть временное отставание на каждом втором увольнении (так что я показываю его в порядке, увольняю, это нормально, затем повторяю , есть задержка, затем повтор, работает нормально, затем повторюсь, есть задержка ... и т. д.)
  5. Если я не использую SKView (если я только что использовал UIView), эта задержка не произойдет. Это происходит только при использовании SKView.

Что может быть причиной этого? Вот упрощенный код, который производит эту проблему:

@implementation NOZTestController 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    // button that loads xib view onto the current skview 
    UIButton *showxib = [[UIButton alloc] initWithFrame:CGRectMake(20, 80, 280, 30)]; 
    [showxib setTitle:@"Add xib view here" forState:UIControlStateNormal]; 
    [showxib addTarget:self action:@selector(showxibTapped) forControlEvents:UIControlEventTouchUpInside]; 

    // button that loads a view controller programmatically 
    UIButton *showmodal = [[UIButton alloc] initWithFrame:CGRectMake(20, 120, 280, 30)]; 
    [showmodal setTitle:@"Show modal" forState:UIControlStateNormal]; 
    [showmodal addTarget:self action:@selector(showmodalTapped) forControlEvents:UIControlEventTouchUpInside]; 


    self.view = [[SKView alloc] initWithFrame:self.view.frame]; 
    SKView *v = (SKView *)self.view; 

    //UIView *v = self.view; 

    [v addSubview:showxib]; 
    [v addSubview:showmodal]; 

} 

- (void)showxibTapped 
{ 
    // displays the xib view 
    [NOZPlayAgainView presentOnView:self.view inRect:CGRectMake(20, 200, 280, 160) withDelegate:self]; 
} 

- (void)showmodalTapped 
{ 
    // displays the modal window 
    UIViewController *vc = [[UIViewController alloc] init]; 

    UIButton *dismiss = [[UIButton alloc] initWithFrame:CGRectMake(40, 40, 240, 40)]; 
    [dismiss setTitle:@"Dismiss" forState:UIControlStateNormal];  
    [dismiss addTarget:self action:@selector(dismissModal) forControlEvents:UIControlEventTouchUpInside]; 
    [vc.view addSubview:dismiss]; 


    [self presentViewController:vc animated:YES completion:nil]; 
} 

- (void)dismissModal 
{ 
    [self.presentedViewController dismissViewControllerAnimated:YES completion:nil]; 
} 

@end 

ответ

2

Это вызвано autolayout ограничениями на представлении XIb. Чтобы прийти к такому выводу, я создал простой вид с подвью и добавил его в SKView. Проблема, о которой я сообщал выше, произошла только тогда, когда я использовал ограничения автоматической компоновки, чтобы разместить subview. Я не знаю, почему это происходит, но в этом причина.

+0

Вы нашли обходное решение? – defense2000x