2011-04-01 3 views
1

저는 iPhone 개발자의 초보자이며 첫 번째 앱을 제작하고 있습니다. 사실, 이미 Tab Bar 응용 프로그램을 잘 만들었지 만, 응용 프로그램을 실행할 때 Splash Screen을 추가하고 싶습니다. TabBarController 전에 스플래시 화면

나는 Loading a Welcome Screen(Splash Screen) before TabBarController

에서 정확하게 문제를 발견하지만 난 내 코드에 넣어하려고 할 때, 시작 화면로드하고 내 tabbarcontroller을 보여주는 유지하지 않습니다.

은 내가 SplashViewController.h, SplashViewController.m 및 SplashView.xib을 만든 다음

#import "SplashViewController.h" 
... 
... 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
     // Override point for customization after application launch. 
     SplashViewController *controller = [[SplashViewController alloc] initWithNibName:@"SplashView" bundle:nil]; 
     [self.tabBarController presentModalViewController:controller animated:YES]; 
     [controller release]; 
     // Add the tab bar controller's view to the window and display. 
     [self.window addSubview:tabBarController.view]; 
     [self.window makeKeyAndVisible]; 

     return YES; 
    } 

애플 리케이션은 오류없이 실행되지만 바로 시작 화면을로드 할 수 없습니다, 귀하의 의견은 매우 감사합니다 내 코드입니다. 감사!

+1

SplashScreenController의 기능은 무엇입니까? .xib에 보이는 것을 정의합니까? 정적 이미지를 원한다면 id Default.png라는 이름을 붙이고 번들에 넣을 수 있으며 다른 코드는 필요 없습니다. – Rayfleck

+0

좋아요, 내 이미지 파일의 이름을 Default.png로 변경 한 후 앱을 실행하면 볼 수 있지만 사용자가 닫을 위치를 누를 때까지 기다리고 싶습니다. 어떠한 제안? 감사! – TonyNet

답변

3

제 생각에 탭 표시 줄 컨트롤러가 아직 화면에 없기 때문에 presentModalViewController:animated:에 대한 호출을 무시하고 있습니다. 탭 막대보기가 하위보기로 창에 추가 된 후 호출을 이동하십시오. makeKeyAndVisible로 전화 한 후에도 일어날 수 있습니다.

+0

예, makeKeyAndVisible 아래에서 코드를 이동하면 스플래시 화면이 나타날 수 있습니다. 감사! – TonyNet

0

스플래시 화면보기 컨트롤러의보기를 창에 추가하고 기본으로 설정하는 것이 좋습니다. 탭 막대 컨트롤러를 사용하여 모달로 표시 할 필요가 없습니다. 스플래시 화면에서 전체 화면을 누르고 버튼을 누를 때마다보기가 제거되고 해제되며 일반 창 설정 (탭 막대 구성 등)을 수행하는 단추가 있습니다.

편집 :

-(IBAction) didPressButtonToDismiss:(id)sender { 

//create a reference to the singleton class for easier typing 
MyAppDelegate *delegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate]; 

[delegate.window addSubview:delegate.tabBarController.view]; 
[delegate.window bringSubviewToFront:delegate.tabBarController.view]; 
[self.view removeFromSuperview]; 
} 

한 가지주의해야 할 : 당신의 시작보기 컨트롤러에서

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    SplashViewController *controller = [[SplashViewController alloc] initWithNibName:@"SplashView" bundle:nil]; 

    [self.window addSubview:controller.view]; 
    [self.window makeKeyAndVisible]; 
    [controller release]; 
} 

: 일부 코드는 앱 위임에

, 무슨 뜻인지 보여 내가 당신이 초기화하고 (당신의 원래 게시물에서 보이는 것처럼) 펜촉에 탭 바 컨트롤러를 설치한다고 가정하십시오.

+0

참조 할 수있는 샘플이 있습니까? 다른 TabBarController View를 호출하기 위해 어떻게 일반 UIViewController를 만들 수 있는지 모르겠습니다. 나는 아직도 개발 접근법을 잘 모른다. – TonyNet

+0

기본적으로 viewController에서 [[UIApplication sharedApplication] delegate] 싱글 톤 앱 대리자를 사용하고 그 창을 사용하여 지금처럼 barController보기를 추가 할 수 있습니다. 아무것도 복잡한. 당신은 지금처럼 당신의 앱 델리게이트에서 tabBarController의 로딩을 할 수도 있고, 윈도우에 뷰를 추가 할 수 있습니다. 실제로 어떤 코드로 내 대답에 도움이됩니다. –

+0

두 개의보기처럼 SplashViewController와 tabBarController 사이를 스왑 할 수 있습니다. 나는 너의 충고를 위해 노력하고 감사 할 것이다. – TonyNet

0

사용자가 탭을 클릭 할 때까지보기를 표시하려면 MetaLik의 제안이 필요합니다. 또는 스플래시 컨트롤러의보기를 앱 창에 직접 추가 할 수 있습니다. 어느 경우

[self.window addSubview:MySplashController.view]; 

, 당신은 버튼이나 사용자의 탭에 대응하기 UIResponder의 일부 서브 클래스를 만들어야합니다, 당신은 것을 얻을 때 dismissModalViewController 또는 [self.view의 removeFromSuperview], 하나는 방법에 따라 당신이 그것을 인스턴스화했습니다.

+0

splashViewController.view를 사용하려고했지만 대신 메인 윈도우 화면 만 표시하려고했습니다. 뭐가 문제 야? 감사! – TonyNet

+0

다시 말하지만 SplashViewController는 무엇을합니까? 배경색은 무엇이고, 프레임은 무엇이며, 무엇을 기대하고 있습니까? – Rayfleck

0

마이크에서 스플래시 화면을 설정하는 방법에 대한 훌륭한 의견은 흙을 간단한 스플래시 화면으로 만들기 위해 Default.png라는 고정 이미지를 만들고 presto magico가 작동하도록합니다. 앱이로드 될 때까지 최대 약 5 초 동안 표시되어야합니다. 320x480 크기의 너비 x 높이를 사용했으며 기본적으로 정확히 내가 필요로하는 것입니다.

마이크에 감사드립니다 !!

또한, 여기에 내가 이런 짓을 Custom Icon and Image Creation Guidelines

0

... 시작 화면 및 아이콘 등을 만들어 함께가는 유용한 링크이며, 그것을 잘 작동합니다.

AppDelegate.h :

@interface AppDelegate_Pad : NSObject 
     <UIApplicationDelegate, SplashViewControllerDelegate> { 
    UIWindow *window; 
    UITabBarController *tabBarController; 
} 
@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 
@end 

AppDelegate.m :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [window addSubview:tabBarController.view]; 
    [window makeKeyAndVisible]; 

    SplashViewController *svc = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil]; 
    svc.delegate = self; 
    [self.tabBarController presentModalViewController:svc animated:NO]; 

    return YES; 
} 
-(void)splashViewControllerDidFinish:(SplashViewController *)splashViewController { 
    [self.tabBarController dismissModalViewControllerAnimated:NO]; 
} 

SplashViewController.h :

@protocol SplashViewControllerDelegate; 
@interface SplashViewController : UIViewController { 
    id<SplashViewControllerDelegate> delegate; 
} 
@property (nonatomic, assign) id <SplashViewControllerDelegate> delegate; 

@end 
@protocol SplashViewControllerDelegate 
-(void)splashViewControllerDidFinish:(SplashViewController *)splashViewController; 
@end 

SplashViewController.m :

// Call the below line where you want to remove splash view 

    [self.delegate splashViewControllerDidFinish:self];