2012-02-05 2 views
2

그래서 StoryBoarding을 사용하여 iPhone 응용 프로그램을 제작하기로 결정했습니다. 그리고 기본 탭 기반 응용 프로그램을 아주 빨리 만들었습니다.맞춤 seque 전환을 사용하면 TabBar가 손실됩니다. 그것을 다시 얻는 방법?

두 개의 탭이있는 초기 View Controller로 TabBar 컨트롤러. 각 탭에서 더 많은 뷰가 내용으로 첨부됩니다.

하나의 탭에는 다음과 같은보기가 몇 개 더있는 탐색 컨트롤러가 있습니다. 여기에 문제가 없습니다. 사용자 지정 단추와 탐색 모음을 사용하여 앞뒤로 이동할 수 있습니다. 또한 TabBar는 뷰를 통한 모든 이동 중에 항상 그 자리에 있습니다.

두 번째 탭이 있습니다. 여기에 내비게이션 컨트롤러가 없습니다. 두 번째 탭에서보기 사이에 맞춤형 전환 애니메이션을 만드는 데 맞춤 다단계를 사용해야하기 때문입니다. 지금까지는 seques, animations 및 transitions에 문제가 없습니다 (최소한 나는 필요한 애니메이션을 얻었습니다 :)). 하지만 내가 붙어있는 곳은 TabBar입니다. 맞춤보기를 사용하여 다른보기로 이동하는 버튼을 누르면 TabBar가 사라집니다. 초기보기로 돌아가더라도 더 이상 TabBar가 없습니다.

나는 뷰 스택에서 탭바 컨트롤러를 팝업하는 것에 대해 읽었지 만 찾을 수있는 모든 샘플은 저에게 맞지 않습니다.

비슷한 일을하는 사람이 있다면 해결책을 공유하십시오. 어떤 좋은 튜토리얼이나 샘플을 가리키는 매우 감사하겠습니다.

편집 : 그래서 내 사용자 지정 seque은 다음과 같습니다 :

내 "(무효) 수행"이 같은 같습니다. (적어도 예상대로 소스로부터 목적지로 애니메이션을 잘못 유일한 TabBar가 숨겨 지거나 해제 됨)

#import "XCustomSeque.h" 
#import <QuartzCore/QuartzCore.h> 
@implementation XCustomSeque 
@synthesize appDelegate=_appDelegate; 
-(void) perform{ 
    UIViewController *srcViewController = (UIViewController *) self.sourceViewController; 
    UIViewController *destViewController = (UIViewController *) self.destinationViewController; 

    self.appDelegate = [[UIApplication sharedApplication] delegate]; 

    CATransition* trans = [CATransition animation];  
    [trans setType:kCATransitionMoveIn]; 
    [trans setFillMode:kCAFillModeBoth]; 
    [trans setDuration:1]; 
    [trans setSubtype:kCATransitionFromLeft]; 

    CALayer *layer = destViewController.view.layer; 

    [srcViewController.view removeFromSuperview]; 
    [self.appDelegate.window addSubview:destViewController.view]; 
    [layer addAnimation:trans forKey:nil]; 

    self.appDelegate.window.rootViewController=destViewController; 
} 
@end 
+0

두 번째 탭에서는 "모달"segue (seque)가 아닌 것 같습니다. 즉, 탭 모음을 포함하여 기존의보기 계층 구조에 대한 모달 전체 화면보기를 열고, "다시 탐색"(다른 모달보기를 작성했다고 생각할 때), 다른 모달 전체 화면보기를 엽니 다. "뒤로 이동"하는 올바른 방법은 [self dismissModalViewControllerAnimated : YES]를 호출하는 것입니다. – hoshi

+0

아니요 두 번째 탭에 "모달"밀기가 없습니다. Modal을 사용하면 사용자 정의 애니메이션과 함께 사용자 정의 Seque를 사용할 수 없었습니다. – tigukargas

+0

좋아, 나는 모든 종류의 서로 다른 seque 유형을 시도했다. 1) 푸시 2) 모달 3) 맞춤 | TabBar를 숨기지 않는 단 하나는 푸시입니다. 이 Seque의 나쁜 점은 여기에 트랜지션을위한 커스텀 애니메이션을 적용하는 것이 불가능하다는 것입니다. 그래서 푸시는 단순히 의문의 여지가 없습니다. – tigukargas

답변

1

두 번째 탭에서는 네비게이션 컨트롤러를 사용해야하지만 "네비게이션 막대 표시"는 꺼야합니다. 스토리 보드는 다음과 같습니다. 당신은 VC-2-2 VC-2-1에서 이동하면

 +-> [NavC-1] --> [VC-1-1] --(push)-> [VC-1-2] ... 
     | (shows nav bar) 
[TabC] -+ 
     | 
     +-> [NavC-2] --> [VC-2-1] --(custom)-> [VC-2-2] 
      (hides nav bar) 

, 당신은 다음과 같은 -perform 방법으로 사용자 정의 SEGUE (UIStoryboardSegue의 서브 클래스)를 사용합니다. (How to create custom modal segue in 4.2 Xcode using storyboard 참조)

- (void)perform 
{ 
    UIViewController *src = self.sourceViewController; 
    UIViewController *dst = self.destinationViewController; 
    [UIView transitionWithView:src.navigationController.view duration:0.2 
         options:UIViewAnimationOptionTransitionFlipFromLeft 
        animations:^{ 
         [src.navigationController pushViewController:dst animated:NO]; 
        } 
        completion:NULL]; 
} 

당신은 VC-2-1 VC-2-2에서 다시 이동하면, 당신이 VC-2-1의 새 복사본을 생성하기 때문에 SEGUE를 사용하지 않습니다. 대신 다음과 같이 뒤로 버튼을 눌렀을 때 호출되는 동작 메서드를 사용합니다.

- (IBAction)goBack:(id)sender 
{ 
    [UIView transitionWithView:self.navigationController.view duration:0.2 
         options:UIViewAnimationOptionTransitionFlipFromRight 
        animations:^{ 
         [self.navigationController popViewControllerAnimated:NO]; 
        } 
        completion:NULL]; 
} 
+0

안녕하세요, 기본 맞춤 스팽글을 만드는 방법을 알고 있지만 여전히 시도해 보았습니다. "(void) perform"코드를 사용하면 내보기가 소스에서 소스로 그냥 넘깁니다. (* src와 * dst는 같은 뷰였습니다). 내 Seque 코드 샘플로 초기 게시물을 업데이트했습니다. – tigukargas

+0

아마 두 번째 탭에 UINavigationController가 없다는 것을 의미합니다 ... 또한 샘플을 읽었습니다. "self.appDelegate.window.rootViewController = destViewController;" destViewController를 사용하여 전체 화면 (현재 탭의 한 vc가 아니라 탭 막대 컨트롤러 및 탭의 모든 VC 포함)을 대체한다는 의미입니다. – hoshi

0

그래서 다양한 샘플을 인터넷에 장난 이후 아직 아무도 나중에 해킹 내 사용자 지정 seque 애니메이션 하락이 예상대로 작동 것 같았다있다. Hoshi가 제안한 거의 어느 정도를 고수하기로 결정했습니다. 적어도 내 탭 표시 줄을 항상 볼 수 있고 애니메이션에 대한 코드가 적습니다.

그래서 스토리 보드와 나는이와 함께 종료 (호시의 제안과 다른 비트) : 나는 앞으로 슬라이드 전환 (여기에 기록 없음 코드, 모든 스토리 보드에 있음)에 대한 표준 푸시 Seque을 사용

 +-> [NavC-1] --> [VC-1-1] --(push)-> [VC-1-2] ... 
     | (shows nav bar) 
[TabC] -+ 
     | 
     +-> [NavC-2] --> [VC-2-1] --(push)-> [VC-2-2] 
      (hides nav bar) 

그런 다음 두 번째 지점에서 내비게이션 막대가없는보기와 맞춤식 뒤로 버튼이 있어야 누르면 뒤로 슬라이드 전환이 시작됩니다. 물론, 탭 표시 줄은 그대로 있어야합니다. 탐색 표시 줄은 숨기기 쉽고 [NavC-2] 속성 패널의 "탐색 표시 줄"을 선택 취소하면됩니다. 지금 내가 두 번째 지점의 모든 뷰 컨트롤러에 대한 사용자 정의 클래스를 만든 뒤로 슬라이드 전환을 얻을이 그들을 작성하기 : on_back_button_pressed

#import "VC_2_1.h" 
@implementation VC_2_1 

- (IBAction)on_back_button_pressed:(id)sender 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

@end 

는 [VC-2-1]에있는 뒤로 가기 버튼에 의해 호출 된 것입니다. [VC-2-2]와 두 번째 분기에 이어지는 다른 VC에 대해서도 동일합니다.

그리고이 사람들은 내가 필요한 것을 정확히 내게주었습니다. 사용자 정의 단추를 누르고 슬라이드 왼쪽 및 오른쪽 애니메이션을 사용하여보기간에 이동합니다. 그리고 tabbar는 길을 잃지 않고있다. :)

사실이 문제의 핵심은 호시가 제안한 것과 동일합니다.

[self.navigationController popViewControllerAnimated:YES]; 

이 사용자 정의 버튼을 누르면

건배 (표준 탐색 모음에없는 뒤로 단추를) 나에게 뒤로 슬라이드 애니메이션을 준 유일한 방법이었다!

관련 문제