2014-02-04 1 views
3

Я проводил некоторое время, пытаясь разобраться в пользовательских переходных анимациях, доступных в iOS 7. Согласно this question, UINavigationControllerDelegate - это путь.Рабочая реализация перехода вверх/вниз по слайду с использованием UINavigationControllerDelegate на iOS7

Однако нет примеров или документации, описывающих, как лучше всего приблизиться к простому вертикальному переходу в iOS7. (Есть plethora of other transition styles using UINavigationControllerDelegate, но не так просто, как сдвинуть вид вверх и вниз - есть и другие, которые предлагают просто изменить позицию представления, но это похоже на липкий взлом?). Есть еще others too that go as far back to 2011, но они явно не используют UINavigationControllerDelegate.

Может ли обеспечить основное практическое осуществление простого слайд вверх/вниз перехода с помощью UINavigationControllerDelegate?

Отказ от ответственности: Я хотел бы предоставить код, но так как нет никакого кода нет сообщений ... Я тем не менее создать простой пример использования JQuery, который показывает, что я пытаюсь добиться.

Проверьте, что скрипка here

+0

раздел в моей книге о пользовательских переходной анимации действительно очень хорошо (даже если я говорю так себе). И есть полдюжины примеров на моем [сайте github] (https://github.com/mattneub/Programming-iOS-Book-Examples), чтобы вы начали. Это совсем не сложно (хотя моя книга действительно объясняет некоторые вещи, которые могут быть не сразу очевидны). – matt

ответ

6

есть другие, которые предлагают только изменяющее положение вида, но, похоже, липкого хака

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

Так, например (взято почти непосредственно из кода примера в моей книге):

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { 
    // boilerplate 
    UIViewController* vc1 = 
     [transitionContext 
      viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController* vc2 = 
     [transitionContext 
      viewControllerForKey:UITransitionContextToViewControllerKey]; 
    UIView* con = [transitionContext containerView]; 
    CGRect r1start = [transitionContext initialFrameForViewController:vc1]; 
    CGRect r2end = [transitionContext finalFrameForViewController:vc2]; 
    UIView* v1 = vc1.view; 
    UIView* v2 = vc2.view; 
    // end boilerplate 

    CGRect r = r2end; 
    r.origin.y += r.size.height; // start at the bottom... 
    v2.frame = r; 
    [con addSubview:v2]; 

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    [UIView animateWithDuration:0.4 animations:^{ 
     v2.frame = r2end; // ... and move up into place 
    } completion:^(BOOL finished) { 
     [transitionContext completeTransition:YES]; 
     [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
    }]; 
} 

Этот код взят из моего примера на https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p292customAnimation1/ch19p620customAnimation1/AppDelegate.m пример почти точно, что вы описываете, за исключением того, что это на вкладке контроллер вместо контроллера навигации, и он приходит со стороны, а не снизу. Но принцип точно такой же.

+0

Да, этот пример замечательный. Еще раз спасибо - и я уверен, что следующий парень, который будет искать реализацию вверх/вниз, тоже оценит это! – brandonscript

1

Вот поток. Я старался максимально упростить.

enter image description hereenter image description hereenter image description hereenter image description here