【问题标题】:Lag / Delay on ModalViewController dismiss after loading an xib view over SKView在 SKView 上加载 xib 视图后,ModalViewController 上的延迟/延迟关闭
【发布时间】:2014-05-02 21:56:52
【问题描述】:

想象一下这个场景(下面的一些代码):

  1. 我在视图控制器上有一个 SKView。
  2. 我在 skview 上加载了一个 xib 视图(外部 .xib 文件)(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

【问题讨论】:

    标签: objective-c sprite-kit modalviewcontroller skview


    【解决方案1】:

    这是由 xib 视图上的自动布局约束引起的。为了得出这个结论,我创建了一个带有子视图的简单视图并将其添加到 SKView。我上面报告的问题仅在我使用自动布局约束放置子视图时发生。我不知道为什么会这样,但这就是原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      相关资源
      最近更新 更多