Пользовательский переход с блоком завершения и свойствами

Я хочу сделать пользовательский переход между контроллерами представления, слайд слева направо, как базовый эффект перехода 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 после завершения перехода, чтобы сохранить затемнение после перехода.

Для этого я хотел бы сделать одну из следующих опций (если одна из этих работ мне не нужна, другие):

  1. Получите доступ к свойству darkView SecondVC непосредственно в блоке завершения и измените его

  2. Определите, когда закончится анимация, и измените свойство в этой точке в методе, реализованном в классе SecondVC.

  3. Написать [dest.view addSubview:whiteView]; в блоке завершения ("dest" является контроллером представления назначения) и доступ к ЭТОМУ подпредставлению в другом методе SecondVC

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

1 ответ

Решение

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

Попробуйте это в вашем методе выполнения

FirstViewController *firstVC = self.sourceViewController;
SecondViewController *secondVC = self.destinationViewController;

Возможно, вы можете объявить публичное свойство UIView на вашем secondVC и получить к нему доступ, а также, вероятно, предоставить метод и вызвать его после завершения анимации.

Другие вопросы по тегам