Как открыть родительский viewcontroller для рисования на фоне перед преобразованием, масштабируйте текущее представление до 0.5% - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь использовать popViewcontroller с анимацией преобразования масштаба

в соответствии с этим кодом, когда он начинает преобразование, он отображает черный экран вместо родительского представления

как это исправить?

[UIView animateWithDuration:0.5f
                          delay:0.0f
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         self.view.alpha = 1.0f;
                         self.view.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
                     } completion:^(BOOL finished) {
                        [[self navigationController] popViewControllerAnimated:NO]; 
                     }];

1 Ответ

2 голосов
/ 16 октября 2011

Это ожидаемое поведение, поскольку представление предыдущего контроллера не находится в иерархии представлений до тех пор, пока не будет вызван метод popViewControllerAnimated:, и вы вызовете его после завершения анимации.

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

UINavigationController* navigationController;
CGRect frame;

//keep a reference to the navigation controller as
//[self navigationController] won't work after pop is called
navigationController = [self navigationController];

//remember the frame of the view relative to navigation controller's view
frame = [navigationController.view convertRect:self.view.frame fromView:self.view.superview];

//pop this controller, this will add the view of the
//previous controller into the view hierarchy
[navigationController popViewControllerAnimated:NO]; 

self.view.frame = frame;
//add this view on top of the previous one 
[navigationController.view addSubview:self.view];

[UIView animateWithDuration:0.5f
                      delay:0.0f
                    options:0
                 animations:^{
                     self.view.alpha = 0.0f;
                     self.view.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
                 } completion:^(BOOL finished) {
                     [self.view removeFromSuperview];
                 }];

Кстати, UIViewAnimationCurveEaseInOut не является правильной константой для параметра параметров. Для этого метода вы должны использовать константы, которые начинаются с UIViewAnimationOption.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...