Пользовательский переход с блоком завершения и свойствами
Я хочу сделать пользовательский переход между контроллерами представления, слайд слева направо, как базовый эффект перехода iOS между страницами в AppLaucher, но с затемнением.
У меня есть собственный переход между viewControllers (назовем их FirstVC и SecondVC). Для затемнения у меня есть черный вид, который исчезает во время анимации (SecondVC темнее, чем FirstVC). У меня есть класс - подкласс UIStoryboardSegue - для моего пользовательского перехода, с -(void)perform
метод реализован. В этом методе я реализовал (с более подробной информацией):
//...Initials frames
UIView *blackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
blackView.backgroundColor = [UIColor blackColor];
blackView.alpha = 0;
[UIView animateWithDuration:0.3 animations:^{
blackView.alpha = 0.5;
//...Animations
}
completion:^(BOOL finished){
}];
Я уточнил, что два контроллера просмотра находятся в двух разных контроллерах навигации.
Для затемнения я хотел бы изменить свойство darkView, объявленное в классе SecondVC после завершения перехода, чтобы сохранить затемнение после перехода.
Для этого я хотел бы сделать одну из следующих опций (если одна из этих работ мне не нужна, другие):
Получите доступ к свойству darkView SecondVC непосредственно в блоке завершения и измените его
Определите, когда закончится анимация, и измените свойство в этой точке в методе, реализованном в классе SecondVC.
Написать
[dest.view addSubview:whiteView];
в блоке завершения ("dest" является контроллером представления назначения) и доступ к ЭТОМУ подпредставлению в другом методе SecondVC
Я уже много чего перепробовал для трех решений, но буду очень признателен за вашу помощь. Спасибо
1 ответ
Что ж, если у вас реализован пользовательский класс segue, то получение экземпляра secondViewController, который собирается перенести в стек навигации, должно быть простым.
Попробуйте это в вашем методе выполнения
FirstViewController *firstVC = self.sourceViewController;
SecondViewController *secondVC = self.destinationViewController;
Возможно, вы можете объявить публичное свойство UIView на вашем secondVC и получить к нему доступ, а также, вероятно, предоставить метод и вызвать его после завершения анимации.