Вы, кажется, не удаляете представления, вы просто делаете невидимым, устанавливая альфа в ноль.Поэтому каждый раз, когда вы вызываете ваш второй пример кода, вы добавляете новую версию фонового представления и диалогового окна в self.view
.При втором вызове у вас будет два фоновых представления, оба с tag = 1, и вы получите свой первый фоновый просмотр из вызова на [self.view.superview viewWithTag:1]
, поэтому ваш недавно добавленный фоновый просмотр не становится невидимым.
Но это еще не все, у вас также есть утечка памяти для ResultDialogController
и ResultBackgroundViewController
.Звонить на retain
не нужно, когда вы звоните initWithNibName:bundle:
.Возможно, вы делаете это, потому что у вас происходит сбой, когда вы отпускаете контроллеры?
Что вам нужно сделать, это создать ivars и свойства для ваших контроллеров.
@property (nonatomic, retain) ResultDialogController *resultController;
@property (nonatomic, retain) ResultBackgroundController *backgroundController;
Затем, когда вы показываете контроллеры, вы можете сделать что-то вроде:
ResultDialogController *dialogController = [[ResultDialogController alloc] initWithNibName:@"ResultDialogController_" bundle:nil];
self.dialogController = dialogController;
ResultBackgroundViewController *bgViewController = [[ResultBackgroundViewController alloc] initWithNibName:@"ResultView" bundle:nil];
self.backgroundController = bgViewController;
// do the same as before
Затем в buttonTapped:
вы сделаете:
[UIView animateWithDuration:0.5f
animations: ^{
self.dialogController.view.alpha = 0;
self.backgroundController.view.alpha = 0;
}
completion: ^(BOOL finished){
[self.dialogController.view removeFromSuperview];
[self.backgroundController.view removeFromSuperview];
}
];
И чтобы возглавить еговыкл, не забудьте освободить контроллер ivars в dealloc.