我有一个在单个视图上播放的游戏,当游戏结束时,我希望用户能够按下一个按钮(再次播放),这将完全重新加载视图(清除所有游戏数据并刷新视图为如果它是第一次加载)。我试过了
[self.view setNeedsDisplay]
然而,没有任何事情发生。我是否必须手动清除数据,或者是否有办法立即重置所有内容?
答案 0 :(得分:0)
我在这种情况下同样做的是创建一个包含所有游戏子视图的属性等。
@property (nonatomic, strong) UIView *gameView;
然后在viewDidLoad中,我们调用了一个首次设置游戏视图的方法(稍后我们会再次使用相同的方法来重置游戏)
- (void)viewDidLoad
{
[super viewDidLoad];
[self setUpGame];
}
- (void)setUpGame
{
// Your game views (subviews, buttons, etc.) set up here
self.gameView = [[UIView alloc] initWithFrame:self.view.bounds];
}
然后,当用户点击再次播放按钮时,我们只是从超级视图中删除游戏视图,并调用我们讨论的先前方法,再次设置游戏。您的按钮的目标应设置为调用以下方法:[self playAgain];
- (void)playAgain
{
[self.gameView removeFromSuperview];
// This is the method we previously discussed above
[self setUpGame];
}
这取决于你想到一些很酷的独特动画,让它在这一点上令人愉悦地重置游戏:)
答案 1 :(得分:0)
setNeedsDisplay只是表示您希望iOS重绘屏幕,您很少需要手动调用。
我可能会实现像@ troop231这样的东西,这是一种重置方法,但我不会重新分配任何按钮/视图等,因为这可能是昂贵的。在MVC模型中,您应该将您的数据(分数,生命数等)分开存储,您的视图应该只引用它们。因此,重置模型并假设您的视图知道模型更改,它们将相应地更新。
这样做的方法包括KVO,NSNotification,Core Data的NSFetchedResultsController(可能是矫枉过正),授权等。