Вопрос
пожалуйста, рассмотрите приведенный ниже код и скажите мне, что я делаю неправильно.
Я хочу переключаться между двумя UIViews.
Каким-то образом, когда я отклоняюсь от первоначального вида, я получаю просто перевернутый вид без анимации.Когда я переворачиваю назад, анимация отображается нормально.
Перевороты запускаются с помощью кнопок на самих представлениях.
- (IBAction)showMoreInfo:(id)sender
{
UIView *moreInfo = self.flipView;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];
[UIView setAnimationBeginsFromCurrentState:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
UIView *parent = self.view.superview;
[self.view removeFromSuperview];
[parent addSubview:moreInfo];
[UIView commitAnimations];
}
- (IBAction)showLessInfo:(id)sender
{
UIView *lessInfo = self.view;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];
[UIView setAnimationBeginsFromCurrentState:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.flipView cache:YES];
UIView *parent = self.flipView.superview;
[self.flipView removeFromSuperview];
[parent addSubview:lessInfo];
[UIView commitAnimations];
}
Решение
Вероятно, это потому, что вы не используете представление контейнера в качестве представления перехода.Обратитесь к документации по setAnimationTransition:forView:кэш:
Если вы хотите изменить внешний вид представления во время перехода — например, переключиться с одного представления на другое — используйте представление-контейнер, экземпляр UIView, следующим образом:
- Начать блок анимации.
- Установите переход в представлении контейнера.
- Удалите подпредставление из представления контейнера.
- Добавьте новое подпредставление в представление контейнера.
- Зафиксируйте блок анимации.
Попробуйте использовать self.view.superview
в виде перехода анимации showMoreInfo:
Причина, по которой showLessInfo:
метод работает, если вы используете представление контейнера.
Другие советы
Можете ли вы использовать свой MainWindow (UIWindow) в качестве представления контейнера, поскольку UIWindow унаследован от UIView?
Также в iPhone 3.0 появилась транзакция переворота с помощью метода PresentModalViewController:
CustomViewController *vc = [[CustomViewController alloc]
initWithNibName:@"CustomViewController" bundle:nil];
vc.delegate = self;
// The magic statement. This will flip from right to left.
// present the modal view controller then when you dismissModalViewController
// it will transition flip from left to right. Simple and elegant.
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:vc animated:YES];
[vc release];
После iOS 4.0 вы можете переключаться между представлениями следующим образом:
[UIView transitionFromView:sourceView toView:destinationView duration:0.35f options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) {
NSLog(@"I just flipped!");
}];
Как упомянул Джейсон, вам нужно, чтобы это происходило в представлении контейнера.