Как исчезнуть подпредставление, чтобы показать представление UIViewController, загруженное из .nib

У меня есть ViewController, который загружается из файла .nib. в методе viewDidLoad я создаю подвид и добавляю его в иерархию представлений. Как мне убрать это подпредставление, чтобы отобразить представление в файле .nib?

(подпредставление похоже на заставку, которую я хочу убрать, чтобы показать представление в .nib, оно настроено таким образом, так как для меня это был самый простой способ.)

Вот часть моего кода (я пытался установить ссылку на исходное представление из пера в viewDidLoad, но не смог заставить его работать):

[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"View did load");
//set reference to view in .nib here
UIView *currentView = self.view;

CGRect frame = [[UIScreen mainScreen] bounds];
splashView = [[splashView alloc] initWithFrame:frame];
[[self view] addSubview:splashView];
//transition did not work

[UIView transitionFromView:splashView toView:currentView duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished) {
    NSLog(@"transition finished");
}];

}

Этот код дает сбой. Что я делаю неправильно?


person vergil castelo    schedule 06.12.2012    source источник
comment
Вы изучали использование раскадровки/переходов?   -  person Oliver Cooper    schedule 06.12.2012


Ответы (1)


Попробуйте следующее вместо исходного кода:

[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"View did load");

CGRect frame = [[UIScreen mainScreen] bounds];
splashView = [[splashView alloc] initWithFrame:frame];
[[self view] addSubview:splashView];
[self.view bringSubviewToFront: splashView];

[UIView animateWithDuration: 2.0
                     delyay: 0.5 // omit if you don't need a delay
                    options: UIViewAnimationCurveEaseOut // check the documentation for other options
                 animations: ^{ 
                    splashView.alpha = 0;
                 } 
                 completion: ^(BOOL finished) {
                    [splashView removeFromSuperView];
                 }];

Я не знаю, используете ли вы ARC или нет, используете ли вы раскадровки или нет! Если вы заметили, что используете ARC, то управление памятью в этом фрагменте неверно.

person Nenad M    schedule 06.12.2012
comment
Я не использовал раскадровки, потому что в некоторой литературе, которую я читал, говорилось, что раскадровки, хотя и просты в использовании, имеют тенденцию сбивать новичков с толку при изучении некоторых основных понятий. Я использую iOS 6 и ARC. Спасибо Nenad M, это сработало отлично. Как неправильно управление памятью во фрагменте? - person vergil castelo; 07.12.2012
comment
Привет! Если вы используете ARC, вам подойдет предоставленный образец. В коде, отличном от ARC, вам пришлось бы выпускать/автоматически выпускать splashView в какой-то момент времени. - person Nenad M; 07.12.2012