yes, create a method that creates the scene in the first place and recall it. If you have objects that are properties remove them from parent before recalling your scene creation method.
Example:
-(id)initWithSize:(CGSize)size {
[super initWithSize:size];
[self startNewGame];
return self;
}
-(void)startNewGame {
//all your scene configs here
}
-(void)buttonThatsCalledOnRestartClick {
[self startNewGame];
}
the reason you're seeing your sprite in the same spot is because you're not removing it from the scene when you restart. Since you should probably just completely rebuild your scene you should remove all objects from scene and then call your "startNewGame" method again.
Example of removing all objects from scene:
for (SKNode* node in self.children) {
[node removeFromParent];
}