2009-08-31 16 views
1

私は、レベルでのユーザーの操作性に応じてイメージを表示するUIViewを持っています。ユーザーは次のレベルに進むオプションを持っています。どのくらいうまく行ったかに応じた画像UIViewの再利用

ユーザーが次のレベルに移動することを決定した後、UIViewをリリースすると、UIView内では一度終了するとすべてが解放されますが、 UIViewは2回目に読み込まれ、最初の画像がまだ残り、2枚目の画像が重ねて表示されるので、両方の画像が同時に表示されます。

なぜこれが起こっている私は、私はインターフェイスでのUIViewを作成し、私はUIViewの内部のすべてを解放し、その後、私は、ユーザーがそれ

で終了したときのUIViewを解放かなり確信して言ったように、私はわからないんだけどビルダー

任意の助けをいただければ幸いです

//this is the code to access the UIView 
-(void)DisplayStatsForLevel:(NSInteger)level ScoreEarned:(NSInteger)pScore NumberHit:(NSInteger)pNumberHit TotalTargets:(NSInteger)pTotalTargets MedalEarned:(NSInteger)pMedalEarned BulletsFired:(NSInteger)pBulletsFired 
{ 
switch(level) 
{ 
    case 1: 
     [levelOne removeFromSuperview]; 
     [levelOne release]; levelOne = nil; 
     [self.view addSubview:levelComplete]; 
     [levelComplete SetupScreen:pScore NumberHit:pNumberHit TotalTargets:pTotalTargets MedalEarned:pMedalEarned BulletsFired:pBulletsFired]; 
     break; 
    case 2: 
     [levelTwo removeFromSuperview]; 
     [levelTwo release]; levelTwo = nil; 
     [self.view addSubview:levelComplete]; 
     [levelComplete SetupScreen:pScore NumberHit:pNumberHit TotalTargets:pTotalTargets MedalEarned:pMedalEarned BulletsFired:pBulletsFired]; 
     break; 
    default: 
     break; 
} 

}

//this is the code that releases the UIView 
-(void)NextLevel:(NSInteger)nextLevel 
{ 
switch (nextLevel) 
{ 
    case 2: 
     [levelComplete removeFromSuperview]; 
     [levelComplete release]; levelComplete = nil; 
     [self.view addSubview:levelTwo]; 
     [levelTwo SetupLevel]; 
     break; 
    default: 
     break; 
} 

}

//this is the code that displays the image 
switch (medalWon) 
{ 
    case 1: 
     medalImage = [UIImage imageNamed:@"Bronze.png"]; 
     break; 
    case 2: 
     medalImage = [UIImage imageNamed:@"Silver.png"]; 
     break; 
    case 3: 
     medalImage = [UIImage imageNamed:@"Gold.png"]; 
     break; 
    case 4: 
     medalImage = [UIImage imageNamed:@"Platinum.png"]; 
     break; 
    default: 
     break; 
} 

medal =[[UIImageView alloc] initWithFrame:medalFrame]; 
medal.image = medalImage; 
[medalImage release]; 
[medal setNeedsDisplay]; 

[self addSubview:medal]; 
+0

いくつかのコードが役に立ちます。あなたのリリースでは、保持カウントは減少するだけで、実際にはデアロックは発生しません。 Plus Imは、2つの画像が同じ場所に終わるように、2番目の画像をどのように描画するのか興味があります。 – mahboudz

+0

私はUIView Genericを同じようにセットアップするようにしました。(レベルのための統計画面だと思うので)画像の描画はまったく同じです。数分を与えて、私はいくつかのコードを投稿します。 – Keeper

+0

メダル(画像ビュー)は、2枚の画像が互いに重ねて表示されるので終了しますか?お互いの上に2つ以上のメダル(イメージビュー)を作成していますか? – mahboudz

答えて

1

私はちょうど今、似た何かを試みたが、2枚の重複画像を得るために、私はこれを2回呼び出す必要がありました:

メダル= [[UIImageViewのalloc] initWithFrame:medalFrame]; medal.image = medalImage; [medalImage release]; [medal setNeedsDisplay];

[self addSubview:medal];

あなたはそのことを確認できますか?

+0

技術的には、最初のレベルがそのレベルで呼び出された後に2回呼び出され、次にlevelComplete UIViewが解放され、ユーザーはレベル2で再生できるようになり、次にfinse levelCompleteのレベル2が再び呼び出されてメダルが表示されます。 ..レベルは、レベルクリアの最初のインスタンスがクリアされていないと私はかなり理由を確認していないと思われる – Keeper

+0

次々に異なるバッジで追加する前に、お互いの上に2つを取得しないように、メダルを削除する必要があります。それ以外の場合は、2つのUIImageViewを作成し、それらを同じビューに追加します。 – mahboudz

+0

ええと私は文字通り、私は2番目のものを追加する前にイメージを削除していないとわかったのですが、私が今明らかにしていないのは、DeallocがlevelCompleteのインスタンスが1つしかないという理由です。私はremoveFromSuperViewを削除しますか? – Keeper