2014-04-09 3 views
0

내 요구 사항은 화면 오른쪽에서 스 와이프하면 (viewcontroller A) 대화 형 전환을 사용하여 다음 viewcontroller (viewcontroller B)로 푸시해야합니다. 나는 화면의 왼쪽에서 스 와이프 (viewcontroller B) 대화식 전환을 사용하여 컨트롤러를 닫습니다. 원 총리는 대화 형 전환을 사용하여의 ViewController를 닫 구현 한 올바른 방법 .I 그것을 구현할 수 있지만 수없는 이러한 대화 형 전환 섹션대화 형 전환을 사용하여 viewcontroller를 표시하는 방법

에 대한 코드 내 라인입니다 대화 형 전환

#import "AMSimpleAnimatedDismissal.h" 

@implementation AMSimpleAnimatedDismissal 
-(NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext 
{ 
    return 1.5f; 
} 

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext 
{ 
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
    [[transitionContext containerView]addSubview:toVC.view]; 
    CGRect toFrame = toVC.view.frame; 
    CGRect initialFrame = fromVC.view.frame; 
    toVC.view.frame = CGRectMake(-320 ,0, CGRectGetWidth(toFrame) , CGRectGetHeight(toFrame)); 

    CGRect finalFrame = CGRectMake(initialFrame.size.width, initialFrame.origin.y, initialFrame.size.width, initialFrame.size.height); 
    UIViewAnimationOptions opts = UIViewAnimationOptionCurveLinear; 
    [UIView animateWithDuration:1.0 delay:0 options:opts animations:^{ 
     fromVC.view.frame = finalFrame; 
     toVC.view.frame = CGRectMake(0, 0, CGRectGetWidth(fromVC.view.frame), CGRectGetHeight(fromVC.view.frame)); 
    } completion:^(BOOL finished) { 
     [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; 
    }]; 

} 

를 사용하여의 ViewController에 밀어 구현할 수있는 방법

+0

내가 제대로 UINavigationController가 생성과 viewControllers에 푸시했다면,이 실제로 아이폰 OS 7 UISwipeGestureRecognizer 클래스 – Dili

+0

에 의해 슬쩍 제스처를 사용하고있을 수 있습니다 구현하기 위해 내가 가장 좋은 방법을 이해하는 것과, 사용자의 요구 사항에 대한 정확하게 명확하지 않다 - 왼쪽에서 오른쪽으로 스 와이프하면 이전 컨트롤러 – SAKrisT

+0

@SAKrisT : iOS 7의 기본 기능이지만 왼쪽에서 오른쪽으로 쓸어 넘기를 원한다는 것을 알고 있습니다. 이전 viewcontroller에 비해 viewcontroller pop처럼 보이지만 viewcontroller 같은 scrollview, pageviewcontroller 같은 이동해야합니다 ... scrollview 내 경우 실용적이지 않습니다. – abymathew

답변

2

스 와이프 동작 방향을 설정할 수 있습니다. 동작 메서드가 호출되면 스 와이프 방향을 확인하고 방향이 UISwipeGestureRecognizerDirectionRight이면 [self.navigationController popViewControllerAnimated:BOOL]을 사용합니다. "isPop"BOOL 속성을 AMSimpleAnimatedDismissal에 추가하고이 클래스가 프레젠테이션과 해고를 모두 처리하도록 할 수 있습니다.

0

네비게이션 컨트롤러와 상호 작용하는 사용자 정의 전환을하는 경우, 다음을 수행해야합니다

  • 는 대한 delegate을 지정하여 UINavigationController

  • 귀하의 UINavigationControllerDelegate 다음 위임 프로토콜 방식의 애니메이션 컨트롤러를 지정해야합니다 :

    - (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController 
                animationControllerForOperation:(UINavigationControllerOperation)operation 
                   fromViewController:(UIViewController *)fromVC 
                   toViewController:(UIViewController *)toVC 
    
  • 대화 형으로 푸시을 원하는 다음과 같은 방법으로도 상호 작용 컨트롤러를 지정해야합니다 :

    - (id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController 
             interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController 
    

    이 방법은 일반적으로 제스처에 의해 시작된 경우 UIPercentDrivenInteractiveTransition를 반환하고, 그렇지 않으면 nil를 반환해야합니다.

  • 당신은 제스처 인식기를 추가해야합니다 (예를 들어, UISwipeFromEdgeGestureRecognizer) 전환을 시작하고 위의 interactionControllerForAnimationController 메소드에 의해 반환되는 UIPercentDrivenInteractiveTransition을 업데이트하고 전체 또는 동작이 완료 될 때 전환을 취소 할 것이라고 전망합니다.

관련 문제