Подтвердить что ты не робот

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

Я хочу показать пользовательскую анимацию при нажатии контроллера вида: я хотел бы добиться чего-то вроде анимации "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 я не могу изменить размер рамки представления... am I?

4b9b3361

Ответ 1

Что вы можете сделать, это нажать следующий контроллер представления, но не анимировать его, например:

[self.navigationController pushViewController:nextController animated:NO];

... и затем в контроллере представления, который вставляется в него, вы можете сделать пользовательскую анимацию этого вида с помощью CoreAnimation. Это может быть лучше всего сделано в методе viewDidAppear:(BOOL)animated.

Ознакомьтесь с Core Animation Guide о том, как на самом деле сделать анимацию. Посмотрите, в частности, на неявную анимацию.

EDIT: обновленная ссылка

Ответ 2

Я использую следующую функцию (добавленную к 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];
}

Я думаю, вы могли бы адаптировать этот код для выполнения любой анимации, которую вы хотите.

Ответ 3

Код, который вы ищете:

    [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];

Ответ 5

@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 переместился до конца после анимации. Не знаю, был ли этот кошерный, но опять же он работал.

Ответ 6

Что вы хотите - это загрузки для главы 2 кулинарная книга разработчиков iphone. Посмотрите на образец affineRotate конкретно, хотя любой из основных образцов аниматина поможет вам.

Ответ 7

Посмотрите ADTransitionController, сокращение замены для UINavigationController с помощью настраиваемых анимаций перехода (его API соответствует API UINavigationController), который мы создали в Applidium.

Вы можете использовать разные предопределенные анимации для действий push и pop, таких как Swipe, Fade, Cube, Carrousel и т.д. В вашем случае анимация, которую вы запрашиваете, называется так называемой Zoom.