UINavigationController Пользовательские анимации перехода - PullRequest
2 голосов
/ 24 февраля 2010

У меня есть UINavigationController с видимой панелью навигации и панелью инструментов. При нажатии на контроллер (тот же контроллер) я хочу анимировать только часть содержимого (например, с эффектом скольжения) и оставить панель навигации и панель инструментов не анимированной / постоянной. Кто-нибудь может предложить какие-либо предложения по чистому способу сделать это? Спасибо.

Ответы [ 3 ]

1 голос
/ 26 февраля 2010

Попробуйте добавить панель инструментов в качестве подпредставления к окну вместо просмотра. и ограничьте высоту вида навигационного контроллера, чтобы его панель инструментов была видна вам. Теперь, если вы нажмете на контроллер просмотра, панель навигации и панель инструментов останутся не анимированными / неподвижными.

1 голос
/ 24 февраля 2010

Я бы переместил представления вручную и анимировал их, используя блок анимации:

// Get position of old view controller
CGPoint center = [oldViewController.view center];

// Position new view controller to the right of old one
[newViewController.view setCenter:CGPointMake(center.x + 320, center.y)];

// Animate change
[UIView beginAnimations:@"myAnimation" context:NULL];

// Move old view off screen
[oldViewController.view setCenter:CGPointMake(center.x - 320, center.y)];

// Move new view onto screen
[newViewController.view setCenter:center];

// Set animation delegate to self so that we can detect when animation is complete
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationComplete:finished:target:)];

// Finish animation block
[UIView commitAnimations];

Если вам нужно фактически нажать новый контроллер вида с помощью контроллера навигации, вам нужно убедиться, что вы делаете это после завершения анимации, иначе старый вид не будет отображаться. Для этого вам нужно использовать метод setAnimationDelegate, чтобы получать уведомления о завершении анимации и передавать вызываемый метод селектора. Реализуйте приведенный выше код и следующий метод в одном классе:

(void)animationComplete:(NSString *)animationId 
               finished:(BOOL)finished 
                 target:(UIView *)target
{
  if([animationId isEqualToString:@"myAnimation"])
  {
    // Push viewcontroller here
  }
}
0 голосов
/ 27 января 2011

Установите элемент навигации нового UIViewController таким же, как текущий UIViewController.

newViewcontroller.navigationItem = self.navigationItem;
[self.navigationController pushViewController:recallViewController animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...