1

クラスで

@interface StartScene : UIView

私はのインスタンスを呼び出します

@interface HelpView : UIView {
    GameOverMenu* gorm;
    PlayScene* tView;
}

を使用しますaddSubview。ここにも巨大なコードがあります

-(void) removemyself {
    [tView removeFromSuperview];
    [gorm removeFromSuperview];
    [self removeFromSuperview];
}

-(void)restartPlay {
    [tView removeFromSuperview];
    [self playSceneDidLoad];
}

-(void)gameOverDidLoad {
    [tView removeFromSuperview];
    gorm = [[GameOverMenu alloc]initWithFrame:CGRectMake(0, 0, 320, 520)];
    gorm.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backGround.jpg"]];
    [gorm checkScore:Scores];
    [self addSubview:gorm];
}

-(void)playSceneDidLoad {
    [gorm removeFromSuperview];
    tView = [[PlayScene alloc]initWithFrame:CGRectMake(0, 0, 320, 520)];
    tView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backGround.jpg"]];
    [self addSubview:tView];
    [tView ooneFingerTwoTaps];
}

そしての2つのサブクラスHelpView

@interface PlayScene : HelpView

@interface GameOverMenu : HelpView <UITextFieldDelegate>

StartSceneボタンを押すと、のインスタンスがHelpView作成され、initメソッドplaySceneDidLoadが呼び出されます。

内部には、メソッドPlaySceneを呼び出す再起動ボタンがあります。restartPlayゲームが負けたときにgameOverDidLoadメソッドが呼び出されます。

そして両方PlaySceneに、プレーヤーをメインメニューに戻すことになっているメソッドGameOverMenuを呼び出す終了ボタンがあります。removemyself

一見正常に動作するはずですが、再起動ボタンを数回押して終了を押してみると、ビューがスーパービューから削除されなかった場合、終了ボタンを1回押すと1つずつ削除されるようになりました。[super removeFromSuperview];そして、HelpViewで停止しますが、それ自体は削除されませんでした(どこかで呼び出そうとしても) 。

時間内にビューを正しく削除し、終了を押したときにメインメニュー(StartScene)に移動する必要があります。お互いをカバーする多くのビューは良い変形ではないと思います。何が問題ですか?

4

1 に答える 1

0

たまたまサブクラスからスーパークラスのメソッドが呼び出され、そのようなコマンド[self removeFromSuperview];orがある場合[(someOtherSubview) removeFromSuperview];、それは self or (someOtherSubview) を使用するサブクラスです。サブクラスに指定されたサブビューがない場合、コマンドは何もしません。が存在する場合[self removeFromSubview];、サブクラスはそれ自体を削除します。

実際、ボタンをスーパークラスのサブビューとして使用することで、この問題を解決しました。

于 2012-05-04T17:42:18.343 に答える