2009-08-31 2 views
1

У меня есть UIView, который отображает изображение в зависимости от того, насколько хорошо пользователь сделал это на уровне, тогда у пользователя есть варианты для перехода на следующий уровень, и после того, как они будут завершены с тем, который отображает UIView снова с изображение в зависимости от того, насколько хорошо они сделалиПовторное использование UIView

Я освобождаю UIView после того, как пользователь решает, что хочет перейти на следующий уровень и внутри UIView. Я уверен, что я освобожу все, как только закончу, но когда UIView загружается во второй раз, когда изображение с первого раза все еще там, и второе изображение помещается поверх него, поэтому вы одновременно видите оба изображения.

Я не знаю, почему это происходит, как я сказал, я уверен, что я отпускаю все внутри UIView, а затем я выпускаю UIView, когда пользователь закончит с ним

Я создал UIView с интерфейсом Builder

Любая помощь будет оценена

//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

Некоторый код поможет. Ваше освобождение может просто уменьшить количество удержаний, но фактически не приведет к dealloc. Плюс Im любопытно, как вы рисуете свое второе изображение таким образом, что два изображения попадают в одно и то же место. – mahboudz

+0

Я сделал UIView Generic так, чтобы он был настроен одинаково в оба раза (подумайте, что экран экрана для уровня), поэтому рисунок изображения точно такой же, как и каждый раз, дайте мне несколько минут, и я отправлю код – Keeper

+0

Итак, медаль (изображение) заканчивается двумя изображениями, отображаемыми n друг над другом? Не могли бы вы создать две или более медали (изображения) друг на друга? – mahboudz

ответ

1

Я только сейчас попробовал что-то подобное, и для того, чтобы получить два перекрывающихся изображений, я должен был назвать это дважды:

медаль = [[UIImageView Alloc] initWithFrame: medalFrame]; medal.image = medalImage; [medalImage release]; [медаль setNeedsDisplay];

[self addSubview: medal];

Можете ли вы проверить и посмотреть, если вы это делаете?

+0

Технически это вызывается дважды после того, как первый уровень, который он вызывает для этого уровня, и затем выдается уровень Complete UIView, поэтому пользователь может играть через второй уровень, а затем, когда второй уровень в finshed levelComplete вызывается снова, и появляется медаль. .. Кажется, что первый экземпляр levelComplete не очищается, и я не совсем уверен, почему – Keeper

+0

Чтобы не набирать двух друг на друга, вы должны удалить медаль, прежде чем добавить, а затем добавить другой значок. В противном случае вы создадите два UIImageViews и добавьте их в один и тот же вид. – mahboudz

+0

Да, я буквально просто понял, что я не удалял изображение перед добавлением второго. Однако теперь я неясен, почему Dealloc никогда не вызван, есть только один экземпляр levelComplete, который не следует вызывать dealloc, когда Я удаляю FromSuperView? – Keeper