为什么没有按钮名.removeFromSuperview总是删除按钮?

时间:2016-01-21 16:52:37

标签: ios swift sprite-kit

在我的快速游戏中,我们有一个主要的游戏场景,然后一旦你在游​​戏中死亡,它会让你进入一个结束游戏屏幕,显示你的分数。然后,在该屏幕上,用户可以选择点击按钮将场景改回游戏。大多数情况下,按钮被移除,一切正常,但每隔一段时间它就不会将其移除并覆盖在游戏场景上。这是按钮运行的代码 -

        scoreLabel.removeFromSuperview()
        highLabel.removeFromSuperview()
        RestartBtn.removeFromSuperview()
        self.RestartBtn.removeFromSuperview()
        self.highLabel.removeFromSuperview()
        self.menuButton.removeFromSuperview()
        self.scoreLabel.removeFromSuperview()
        self.scene!.view?.presentScene(GameplayScene(), transition: SKTransition.crossFadeWithDuration(0.8))

1 个答案:

答案 0 :(得分:0)

self.menuButton和所有其他人可能是weak个引用 即,一旦视图从superview中移除,它们就会变得陈旧。它有时是有效的,有时候并不是在self.menuButton = <something>中引用它的方式,如果在loadViewviewDidLoad中完成,它只是危险的。

不同方法

我建议不要过多地使用UI,并采用更加常规的引用技术,例如hiddenalpha = 0

self.menuButton.removeFromSuperview()
// self.menuButton is stale. You can't re-add your button from that reference

动画显示/隐藏视图

这不会破坏你的引用,看起来比removeFromSuperview

好得多
// Hide with animation
[UIView animateWithDuration:.4f animations:^{
    [self.menuButton setAlpha:0]; // Hide with animation
} completion:^(BOOL finished) {
    // If you decide to remove the view permanently, do it here
    // Without knowing more, I wouldn't recommend it
}];

然后,您可以再次显示UI,无论是否有动画:

[self.menuButton setAlpha:1]; // Show without animation