2009-08-31 6 views
1

사용자가 레벨에서 얼마나 잘했는지에 따라 이미지를 표시하는 UIView가 있으며 사용자는 다음 단계로 계속 진행할 수있는 옵션을 가지고 있으며 UIView가 그들이 얼마나 잘했는지에 따라 이미지UIView 재사용

사용자가 다음 단계로 이동하기를 원한다고 결정한 후 UIView를 릴리스합니다. UIView에서 일단 작업을 마친 후에는 모두 릴리스한다고 확신하지만, UIView는 두 번째로 처음로드 된 이미지가로드되고 두 번째 이미지가 맨 위에 놓이기 때문에 두 이미지를 동시에 볼 수 있습니다.

내가 내가 내가 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

몇 가지 코드가 도움이 될 것입니다. 당신의 release는 retain count를 감소시킬 수도 있지만 실제로는 dealloc으로 이어지지 않을 수도 있습니다. 플러스 Im은 두 이미지가 같은 지점에서 끝나도록 두 번째 이미지를 그리는 방법을 궁금해합니다. – mahboudz

+0

UIView Generic을 두 번 설정 (통계 화면을 한 레벨로 생각)하는 동일한 방식으로 설정하므로 이미지 그리기가 두 번에 정확히 동일하므로 몇 분만 기다려주세요. 일부 코드를 게시합니다. – Keeper

+0

그래서 메달 (이미지 뷰)은 두 이미지가 서로 겹쳐서 표시되게합니까? 서로 위에 두 개 이상의 메달 (이미지 뷰)을 만들 수 있습니까? – mahboudz

답변

1

내가 지금 비슷한 시도하고, 겹치는 두 개의 이미지를 얻기 위해, 내가 두 번이 전화를했다 :

메달 = [[UIImageView에 ALLOC] initWithFrame : medalFrame] medal.image = medalImage; [medalImage release]; [medal setNeedsDisplay];

[self addSubview : medal];

그렇게하고 있는지 확인할 수 있습니까?

+0

기술적으로는 해당 레벨에 대해 호출 된 첫 번째 레벨 이후에 두 번 호출되고 levelComplete UIView가 해제되어 사용자가 레벨 2를 통해 재생할 수 있고 finshed levelComplete의 레벨 2가 다시 호출되고 메달이 표시됩니다. .. levelComplete의 첫 번째 인스턴스가 지워지지 않고있는 것 같습니다. 이유가 확실하지 않습니다. – Keeper

+0

서로 겹치지 않게하려면 다른 배지를 추가하기 전에 메달을 제거해야합니다. 그렇지 않으면 두 개의 UIImageView를 만들고 같은보기에 추가합니다. – mahboudz

+0

그래, 나는 문자 그대로 두 번째 것을 추가하기 전에 Image를 제거하지 않는다는 것을 알아 냈다. 그러나 내가 지금 분명하지 않은 것은 Dealloc이 결코 호출되지 않는 이유이다. levelComplete의 인스턴스가 하나 밖에 없다. dealloc은 호출 될 수 없다. 나는 RemoveFromSuperView를 제거합니까? – Keeper