2014-06-16 2 views
0

Я занят пользовательских анимационного перехода между UIViewControllers и мне нравится UIView, чтобы прыгать, а затем заполняют пространство, подобное следующему скриншоту:Как создать пользовательскую функцию синхронизации?

enter image description here

В настоящее время существует не «Option» Я мог бы создать такой эффект. Теперь я мог бы создать анимацию ключевого кадра с одним ключом наверху и одним в центре, но это не будет чувствовать себя действительно естественным, оно будет чувствовать себя роботизированным.

Как можно подойти к этому?

ИСТОЧНИК (ПОКА)

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext 
{ 
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController *toVC  = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
    UIView    *container = [transitionContext containerView]; 

    if ([fromVC isEqual:self]) 
    { 
     [_activeCardView.superview bringSubviewToFront:_activeCardView]; 

     [UIView animateKeyframesWithDuration:[self transitionDuration:transitionContext] 
             delay:0.0 
            options:UIViewKeyframeAnimationOptionCalculationModeCubic 
            animations:^{ 
             [_activeCardView setFrame:CGRectMake(0.0, 0.0, toVC.view.bounds.size.width, toVC.view.bounds.size.height)]; 
            } 
            completion:^(BOOL finished){ 
             [container addSubview:toVC.view]; 
             [transitionContext completeTransition:YES]; 
            }]; 
    } 
    else 
    { 
     [container addSubview:toVC.view]; 

     [UIView animateWithDuration:[self transitionDuration:transitionContext] 
         animations:^{ 
          [_activeCardView setFrame:_basicCardFrame]; 
         } 
         completion:^(BOOL finished){ 
          [transitionContext completeTransition:YES]; 
         }]; 
    } 
} 

ответ

0

Для гладкого 'скачка' анимации вы можете просто приковать две анимации с кривыми 'EaseInOut'.

[UIView animateWithDuration:<DURATION>/2 delay:<DELAY> options:UIViewAnimationOptionCurveEaseInOut animations:^(void) { 
     //move view up 
    }completion:^(BOOL finished) { 
     [UIView animateWithDuration:<DURATION>/2 delay:<DELAY> options:UIViewAnimationOptionCurveEaseInOut animations:^(void) { 
      //move view down 
     }completion:NULL]; 
    }]; 
+0

Это может сработать, сделать анимацию непринужденной и облегчить, может дать иллюзию искривленного ускорения. Я собираюсь попробовать это. – Mark

Смежные вопросы