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