Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么';t buttonName.removeFromSuperview是否始终删除该按钮?_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios 为什么';t buttonName.removeFromSuperview是否始终删除该按钮?

Ios 为什么';t buttonName.removeFromSuperview是否始终删除该按钮?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,在我的swift游戏中,我们有一个主要的游戏场景,一旦你在游戏中死亡,它会把你放在游戏结束时的屏幕上,显示你的分数。在这个屏幕上,用户可以点击一个按钮将场景切换回游戏。大多数情况下,按钮被移除,一切正常,但有时它不会移除按钮,并覆盖在游戏场景上。这是按钮运行的代码- scoreLabel.removeFromSuperview() highLabel.removeFromSuperview() RestartBtn.removeFromSuperv

在我的swift游戏中,我们有一个主要的游戏场景,一旦你在游戏中死亡,它会把你放在游戏结束时的屏幕上,显示你的分数。在这个屏幕上,用户可以点击一个按钮将场景切换回游戏。大多数情况下,按钮被移除,一切正常,但有时它不会移除按钮,并覆盖在游戏场景上。这是按钮运行的代码-

        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))

self.menuButton
和所有其他按钮可能都是
弱引用。
i、 例如,一旦视图从superview中删除,它们就会过时。它有时有效,有时不符合
self.menuButton=
中引用它的方式,如果在
loadView
viewDidLoad
中执行,则显然是危险的

不同的方法

我建议不要过多地使用UI,而是采用更稳定的引用技术,例如
隐藏
,或
alpha=0

self.menuButton.removeFromSuperview()
//self.menuButton已过时。无法从该引用重新添加按钮
为显示/隐藏视图设置动画

这不会破坏您的引用,而且看起来比从SuperView中移除要好多了:

//用动画隐藏
[UIView animateWithDuration:.4f动画:^{
[self.menuButton setAlpha:0];//用动画隐藏
}完成:^(布尔完成){
//如果决定永久删除视图,请在此处执行
//如果不知道更多,我不会推荐它
}];
然后,您可以再次显示UI,包括或不包括动画:

[self.menuButton setAlpha:1];//无动画显示

self.menuButton
和所有其他按钮可能都是
弱的
引用。
i、 例如,一旦视图从superview中删除,它们就会过时。它有时有效,有时不符合
self.menuButton=
中引用它的方式,如果在
loadView
viewDidLoad
中执行,则显然是危险的

不同的方法

我建议不要过多地使用UI,而是采用更稳定的引用技术,例如
隐藏
,或
alpha=0

self.menuButton.removeFromSuperview()
//self.menuButton已过时。无法从该引用重新添加按钮
为显示/隐藏视图设置动画

这不会破坏您的引用,而且看起来比从SuperView中移除要好多了:

//用动画隐藏
[UIView animateWithDuration:.4f动画:^{
[self.menuButton setAlpha:0];//用动画隐藏
}完成:^(布尔完成){
//如果决定永久删除视图,请在此处执行
//如果不知道更多,我不会推荐它
}];
然后,您可以再次显示UI,包括或不包括动画:

[self.menuButton setAlpha:1];//无动画显示

**Btn
self.**Btn
之间有什么区别吗?只是我们试图解决这个问题。如果按钮上肯定调用了
removeFromSuperview
,我会检查以确保在某个时候没有将按钮添加回superview。我刚刚检查过,看起来它并没有被添加回任何地方。无关:这里有很多风险
self.scene!。查看?
。这就是
if let
as?
guard
的作用。
**Btn
self.**Btn
之间有什么区别吗?我们试图解决这个问题。如果按钮上肯定会调用
removeFromSuperview
,然后,我会检查以确保您没有在某个时候将按钮添加回其superview。我刚刚检查过,它看起来没有被添加回任何位置。无关:此处存在很大风险
self.scene!。查看?
。这就是
如果let
as?
guard
都是为了这个目的。你能举个例子吗?我对这个比较陌生。感谢您的回复。添加了一个块,该块将在0.4秒内淡出视图,您可以稍后淡入。您能提供一个示例吗?我对这个比较陌生。感谢您的回复。添加了一个块,该块将在0.4秒内淡出视图,您可以稍后淡入。