Я представляю модельный вид с анимацией. По умолчанию это происходит снизу вверх. Как я могу сделать анимацию слева направо? Я знаю, что могу использовать навигационный контроллер. Но на самом деле представление представления не нуждается в навигационной панели, а также представленное в режиме просмотра представление не нуждается в навигационной панели. Тем не менее, я хочу переход слева направо.
IPhone: как сделать анимацию presentModalViewController слева направо
Ответ 1
Есть только четыре UIModalTransitionStyle
s:
UIModalTransitionStyleCoverVertical
UIModalTransitionStyleFlipHorizontal
UIModalTransitionStyleCrossDissolve
UIModalTransitionStylePartialCurl
Как вы сказали, навигационный контроллер будет двигаться таким образом. Если вы не хотите использовать это, вам нужно будет анимировать представление самостоятельно.
Ответ 2
Вы можете анимировать справа налево, представляя контроллер вида, используя следующий код
CATransition *transition = [CATransition animation];
transition.duration = 0.4;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
[self.view.window.layer addAnimation:transition forKey:nil];
[self presentViewController:localitiesView animated:NO completion:nil];
Ответ 3
У меня возникла проблема с решением Мэтью, потому что представление, представляющее мое модальное представление, не будет отображаться во время анимации (вместо этого представление представления будет заменено фоном Window, а модальное представление затем будет одушевлено), что привело к яростный опыт. Вместо этого я добавил модальное представление в качестве подчиненного представления представления UIViewController и анимировал его. У меня была запрошена другая анимация, поэтому я попытался изменить некоторые значения для представления анимации, которую вы описываете, но я на самом деле не протестировал код ниже.
UIViewController *modalView = //init your UIViewController
[modalView loadView];
CGRect finalFrame = modalView.view.frame;
[modalView.view setFrame:CGRectMake(-320, 0, self.view.frame.size.width, self.view.frame.size.height)];
[UIView animateWithDuration:1.0 animations:^{
[self.navigationController setNavigationBarHidden:YES];
[self.view addSubview:modalView.view];
[modalView.view setFrame:finalFrame];
}];
Надеюсь, что это поможет.
Ответ 4
UINavigationController
имеет свойство navigationBarHidden
- если вы установите значение YES, вы можете получить стиль перехода слева направо и другие тонкости навигационного контроллера без видимой навигационной панели.
Ответ 5
Просто хотел показать другой вариант - этот позволяет вам представить представление сверху вниз, используя анимацию UIView. обратите внимание, что вы должны добавить новый вид в скрытое состояние - убедитесь, что анимация начинается с полностью загруженного представления.
AddViewController *controller = [[AddViewController alloc] initWithNibName:@"AddViewController" bundle:[NSBundle mainBundle]];
controller.blogs = self.blogs;
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
navController.toolbarHidden = YES;
navController.navigationBarHidden = YES;
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:navController animated:NO];
navController.view.frame = CGRectMake(0, -480, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 20);
navController.view.hidden = NO;
[UIView animateWithDuration:0.3
animations:^{
navController.view.frame = CGRectMake(0, 20, navController.view.frame.size.width, navController.view.frame.size.height);
}];
Ответ 6
Вы можете попробовать что-то вроде этого:
UIViewController *fooViewController = [[[UIViewController alloc] init] autorelease];
CGSize theSize = CGSizeMake(320, 460);
fooViewController.view.frame = CGRectMake(0 - theSize.width, 0, theSize.width, theSize.height);
[UIView beginAnimations:@"animationID" context:NULL];
fooViewController.view.frame = CGRectMake(0, 0, 320, 460);
[UIView commitAnimations];
Ответ 7
Возможный дубликат с дополнительной информацией для отклонения modalViewController с обратной анимацией справа налево: rejectModalViewController с переходом: слева направо