Пользовательская анимация для нажатия UIViewController
Я хочу показать пользовательскую анимацию при нажатии controllerа вида: я хотел бы добиться чего-то вроде анимации «expand», что означает, что новое представление расширяется из заданного прямоугольника, скажем, [100,100 220,380] во время анимации в полноэкранном режиме.
Любые предложения, с которых начать, соответственно любые документы, учебные пособия, ссылки? 🙂
Хорошо. Я мог бы сделать анимацию расширения следующим кодом:
- Метод доступа после завершения анимации UIImageView
- Начать операцию с анимации
- Разработка Android Homescreen
- Изменение размеров макетов программным способом (как анимация)
- Как создать управление вращающимся колесом?
if ([coming.view superview] == nil) [self.view addSubview:coming.view]; coming.view.frame = CGRectMake(160,160,0,0); [UIView beginAnimations:@"frame" context:nil]; [UIView setAnimationDuration:4]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [coming viewWillAppear:YES]; [going viewWillAppear:YES]; coming.view.frame = CGRectMake(0, 0, 320, 480); [going viewDidDisappear:YES]; [coming viewDidAppear:YES]; [UIView commitAnimations];
Мой вид отображается правильно, но, к сожалению, панель навигации не обновляется. Есть ли способ сделать это вручную?
В примере кода функция вызывается все 0,03 секунды, которая обновляет преобразование вида. К сожалению, при UIViewController
я не могу resize frameworks … я?
- Android исчезает и исчезает с помощью ImageView
- Как обеспечить анимацию при вызове другой активности в Android?
- iPhone WebKit CSS анимации вызывают мерцание
- Как вы одушевляете линию на canvasе в C #?
- css3 анимация on: hover; заставить всю анимацию
- Как сделать плавное rotation изображения в Android?
- CSS ТОЛЬКО Анимация Кружок рисования с радиусом границы и прозрачным фоном
- Animation.setFillAfter / Before - работают ли они / для чего они нужны?
Что вы можете сделать, это нажать следующий controller, но не анимировать его, например:
[self.navigationController pushViewController:nextController animated:NO];
… и затем в controllerе представления, который вставляется в него, вы можете сделать пользовательскую анимацию своего представления с помощью CoreAnimation. Это может быть лучше всего сделано в viewDidAppear:(BOOL)animated
методе viewDidAppear:(BOOL)animated
.
Ознакомьтесь с руководством по основной анимации о том, как на самом деле сделать анимацию. Посмотрите, в частности, на неявную анимацию.
EDIT: обновленная ссылка
Я использую следующую функцию (добавленную в UINavigationController
) для настройки анимации push:
- (void) pushController: (UIViewController*) controller withTransition: (UIViewAnimationTransition) transition { [UIView beginAnimations:nil context:NULL]; [self pushViewController:controller animated:NO]; [UIView setAnimationDuration:.5]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationTransition:transition forView:self.view cache:YES]; [UIView commitAnimations]; }
Думаю, вы могли бы адаптировать этот код для выполнения любой анимации.
Код, который вы ищете:
[UIView beginAnimations:@"View Flip" context:nil]; [UIView setAnimationDuration:0.80]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO]; [self.navigationController pushViewController:menu animated:YES]; [UIView commitAnimations];
Heinrich,
Я сделал учебник по youtube, в котором показано, как сделать просмотр расширяться и сокращаться, например, в приложении для facebook iPhone.
Надеюсь, что это может быть полезно: как сделать расширение / сокращение просмотров на iPhone SDK
Адам
@zoul: Это сработало отлично! Я просто изменил «я» на «self.navigationController» и «self.view» на «self.navigationController.view». Не знаю, нужно ли это, но это сработало. И @crafterm, что касается выскакивания назад, просто создайте свой собственный leftBarButtonItem, добавив этот код в viewDidLoad или ViewWillAppear:
//add your own left bar button UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped)]; self.navigationItem.leftBarButtonItem = backButton; [backButton release];
Затем я просто изменил функцию push и сделал эту функцию popWithTransition, которую я вызвал в моем методе -backButtonTapped.
- (void) popWithTransition: (UIViewAnimationTransition) transition { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:.75]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationTransition:transition forView:self.navigationController.view cache:YES]; [UIView commitAnimations]; [self.navigationController popViewControllerAnimated:NO]; }
Обратите внимание, что вызов popViewController переместился до конца после анимации. Не знаю, было ли это кошерным, но опять-таки это сработало.
То, что вы хотите, это загрузки для главы 2 кулинарной книги разработчиков iphone . Посмотрите на образец affineRotate конкретно, хотя любой из основных образцов аниматина поможет вам.
Взгляните на ADTransitionController , заменив UINavigationController на пользовательские анимации перехода (его API соответствует API UINavigationController), который мы создали в Applidium.
Вы можете использовать разные предопределенные анимации для push и pop- действий, таких как Swipe , Fade , Cube , Carrousel и т. Д. В вашем случае анимация, которую вы запрашиваете, называется так называемой Zoom .