Niestandardowa Animacja do pchania kontrolera UIViewController
Chcę pokazać animację niestandardową podczas przesuwania kontrolera widoku: chciałbym osiągnąć coś w rodzaju animacji "rozwiń", co oznacza, że nowy widok rozszerza się z danego prostokąta, powiedzmy [100,100 220,380] podczas animacji na Pełny ekran.
Jakieś sugestie od czego zacząć, jakieś dokumenty, tutoriale, linki? :)
W porządku. Mogę zrobić animację rozwiń za pomocą następującego kodu:
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];
Mój widok jest prawidłowo wyświetlany, ale niestety pasek nawigacji nie jest aktualizowany. Można to zrobić ręcznie?
W kodzie przykładowym funkcję nazywa się all 0.03 seconds, która aktualizuje transformację widoku.
Niestety, naciskając UIViewController
, nie jestem w stanie zmienić rozmiaru ramki widoku ... naprawdę ?
7 answers
Możesz wcisnąć następny kontroler widoku, ale nie Animuj go w ten sposób:
[self.navigationController pushViewController:nextController animated:NO];
...następnie, w kontrolerze widoku, który jest wciskany, możesz wykonać niestandardową animację widoku za pomocą CoreAnimation. Najlepiej zrobić to metodą viewDidAppear:(BOOL)animated
.
Zapoznaj się z przewodnikiem Core Animation Guide o tym, jak właściwie wykonać animację. Spójrz szczególnie na ukrytą animację.
Edytuj: zaktualizowany link
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 20:04:27
Używam następującej funkcji (dodanej do UINavigationController
), aby dostosować animację 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];
}
Myślę, że możesz dostosować ten kod do tworzenia dowolnej animacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-15 08:13:13
Kod, którego szukasz:
[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];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-31 08:02:11
Heinrich,
Zrobiłem tutorial youtube pokazujący, jak zwiększyć i zmniejszyć widoki, jak w aplikacji facebook iPhone.
Mam nadzieję, że może to pomóc: Jak zrobić rozszerzające / zmniejszające się widoki na iPhone SDK
Adam
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-16 13:49:14
@zoul: to zadziałało świetnie! Właśnie zmieniłem "ja" na "ja".navigationController " i " self.zobacz " do " siebie.navigationController.Widok " Nie wiem, czy to było konieczne, ale zadziałało. A @crafterm, co do popping back, po prostu zrób sobie leftBarButtonItem dodając ten kod w viewDidLoad lub 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];
Potem po prostu podkręciłem funkcję push i zrobiłem tę funkcję popWithTransition, którą wywołałem w metodzie-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];
}
Zauważ, że wywołanie popViewController zostało przesunięte w dół do końca, po animacji. Nie wiem, czy to koszerne, ale znowu zadziałało.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-19 11:59:55
To, co chcesz, to pliki do pobrania dla rozdziału 2 iphone developers cookbook . Przyjrzyj się dokładnie próbce afinerotatu, chociaż każda z podstawowych próbek animatin ci pomoże.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 15:54:47
Spójrz na ADTransitionController , spadek zastąpienia UINavigationController niestandardowymi animacjami przejścia (jego API pasuje do API UINavigationController), które stworzyliśmy w Applidium.
Możesz używać różnych predefiniowanych animacji dla push i pop akcji, takich jak Swipe, Fade, Cube, Karuzela i tak dalej. W Twoim przypadku animacja, o którą prosisz, to ta o nazwie Zoom .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-17 13:58:58