У меня есть мой основной вид, и когда пользователь нажимает кнопку «Показать», я хочу, чтобы произошли две вещи:
- Исчезает в черном
UIView
с альфа-0,5, охватывающим весь родительский вид,Я буду ссылаться на это как darkenBackground
- Слайд-представление второго контроллера представления (
self.secondViewController.view
) поверх darkenBackground
Когда пользователь закончил,они нажимают «Готово», и происходит следующее:
darkenBackground
исчезает и удаляется из суперпредставления. self.secondViewController.view
выдвигается из экрана в нижнем направлении иудаляется из суперпредставления.
Все анимации работают одновременно.
До сих пор я был в состоянии выполнить первую часть (вроде как), переход-в.Это отлично работает.Но когда пользователь нажимает «Готово», переход не работает должным образом.Проблемы, с которыми я столкнулся:
darkenBackground
и self.secondViewController.view
исчезают и удаляются, но self.secondViewController.view
не должен был исчезнуть!Я попытался анимировать только второй вид, но он просто исчезает без анимации. - Когда пользователь нажимает «Показать» в течение секунд времени (переход), появляется вид из предыдущего перехода.до анимации.Не похоже, что он был удален из суперпредставления ранее.
Вот мой код:
Когда пользователь нажимает «Показать»:
- (IBAction)showSecondView {
darkenBackground = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];
[darkenBackground setBackgroundColor:[UIColor blackColor]];
[darkenBackground setAlpha:0.5];
self.secondViewController.view.frame = CGRectMake(0, 0, 320, 460);
self.secondViewController.view.backgroundColor = [UIColor clearColor];
[CATransaction begin];
CATransition *animation = [CATransition animation];
[animation setDuration:0.5];
[animation setType:kCATransitionFade];
CATransition *animation2 = [CATransition animation];
[animation2 setDuration:0.5];
[animation2 setType:kCATransitionMoveIn];
[animation2 setSubtype:kCATransitionFromTop];
[animation2 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view addSubview:darkenBackground];
[self.view addSubview:self.secondViewController.view];
[[self.view layer] addAnimation:animation forKey:@"darkenBkgFadeIn"];
[[self.secondViewController.view layer] addAnimation:animation2 forKey:@"ShowSecondView"];
[CATransaction commit];
}
Когда пользователь нажимает «Готово» (функция, определенная в классе secondViewController.m
, где она обращается к переменным контроллера основного вида через делегат):
- (IBAction)hideSecondView {
[CATransaction begin];
CATransition *animation = [CATransition animation];
[animation setDuration:0.5];
[animation setType:kCATransitionFade];
CATransition *animation2 = [CATransition animation];
[animation2 setDuration:0.5];
[animation2 setType:kCATransitionPush];
[animation2 setSubtype:kCATransitionFromBottom];
[animation2 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.myParentController.darkenBackground removeFromSuperview];
[self.myParentController.secondViewController.view removeFromSuperview];
[[self.myParentController.view layer] addAnimation:animation forKey:@"darkenBkgFadeOut"];
[[self.myParentController.secondViewController.view layer] addAnimation:animation2 forKey:@"RemoveSecondView"];
[CATransaction commit];
}
В конечном счете, я хочу показать представление в том жетаким образом появляется модальное представление TWTweetComposeViewController
, где фон темнеет и появляется контроллер.Я мог бы просто использовать модальный контроллер представления, но проблема, с которой я столкнулся, заключается в том, что при представлении контроллера представления он только «появляется» и не скользит снизу (так как мне требуется полупрозрачный фон, я не могу использовать значение по умолчанию).контекст для модального представления).
Не могу понять это, был бы признателен за некоторые рекомендации.