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

Collection<T> настраиваемая обертка [приблизительно 111]. В то время как IList<T> не изолируется, это не обеспечивает точек настройки. Collection<T> методы по умолчанию делегированы к стандарту IList<T> методы, но могут быть легко переопределены, чтобы сделать то, что Вы хотите. Это также возможно к wireup событиям в Collection<T>, что я не верю, мог быть сделан с IList.

Короче говоря, намного легче расширить его после факта, который мог потенциально означать намного меньше рефакторинга.

55
задан NightFury 16 December 2015 в 19:49
поделиться

4 ответа

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

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

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

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

РЕДАКТИРОВАТЬ: обновленная ссылка

25
ответ дан 7 November 2019 в 07:12
поделиться

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

3
ответ дан 7 November 2019 в 07:12
поделиться

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

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

53
ответ дан 7 November 2019 в 07:12
поделиться

@zoul: Отлично сработало! Я просто изменил «self» на «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 был сдвинут в конец после анимации. Не знаю, кошерно ли это, но опять же, это сработало.

7
ответ дан 7 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: