Пользовательская анимация для нажатия UIViewController

Я хочу показать пользовательскую анимацию при нажатии controllerа вида: я хотел бы добиться чего-то вроде анимации «expand», что означает, что новое представление расширяется из заданного прямоугольника, скажем, [100,100 220,380] во время анимации в полноэкранном режиме.

Любые предложения, с которых начать, соответственно любые документы, учебные пособия, ссылки? 🙂


Хорошо. Я мог бы сделать анимацию расширения следующим кодом:

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 … я?

Что вы можете сделать, это нажать следующий 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 .

  • Анимация в ноутбуке iPython
  • Реверсирование анимации
  • Android слайд-анимация слева направо
  • Анимация для expandableListView
  • Как анимировать путь на canvasе - андроид
  • Анимировать обновление ProgressBar в Android
  • Анимация CSS3: отображение + непрозрачность
  • Простая анимационная петля для CSS - Fading In & Out «Загрузка» текста
  • Анимация в панели уведомлений Пользовательский вид
  • UIDatePicker появляется после нажатия кнопки UIButton
  • Android: java.lang.OutOfMemoryError:
  • Давайте будем гением компьютера.