앱을 실행하면 메인 화면이 로딩되어 화면에 나타날 때까지 아주 잠깐동안 검정색 바탕화면이 나타난다.
이는 사용자가 무거운 앱을 실행할 경우 로딩시간이 길어져 검정색 화면을 좀 더 오래동안 지켜봐야 하는 상황이 벌어질 수도 있기 때문에 Apple에서는 Intro 화면(image등)을 앱에 추가해서 사용자가 빈껍데기 검정화면을 보며 지루해 하는 대신에 앱내부에 첨부되어 있는 Intro image등을 볼 수 있게하도록 가이드하고 있다.
Intro image를 앱에 추가하려면 사용할 이미지 파일을 default.png(320x480) 또는 default@2x.png(640x960)로 만들어 project에 추가하면 자동적으로 앱이 실행될 때 화면에 나타났다가 메인화면으로 전환된다.
기본적으로 Intro 화면을 포함한 앱의 화면은 상단의 Status bar ( 네트워크, 시간, 배터리량등의 정보가 나타나는 부분 ) 아래에 표시가 되지만, Status bar를 화면에서 숨기고 앱화면이 전체화면을 차지하여 좀 더 넓은 화면공간을 사용하도록 하고 싶을 경우도 많이 있을 것이다. ( 일반적으로 앱의 Intro화면이나 화면을 넓게 사용해야 하는 대부분의 게임앱등... )
내가 만드는 앱의 Intro화면을 Status bar 없이 전체화면으로 표시하고 싶다면 다음과 같이 간단하게 적용할 수 있다.
아래 화면처럼 project nevigator에서 (ProjectName)-info.plist 를 선택하면 오른쪽에 project 정보들이 표시되는데 이 곳에 "Status bar is initially hidden" 항목을 추가( 마우스 오른쪽 버튼 => Add Row를 선택 )하고 Value를 "YES" 로 설정하면 앱 실행시 Status bar가 화면에 표시되지 않는다.
하지만 위와같이 하게되면 Intro화면 뿐 아니라 앱 구동화면 전체에서 Status bar가 표시되지 않게된다.
게임앱들의 경우에는 화면을 조금이라도 더 넓게 확보해야 하기 때문에 이렇게 처리를 하지만 일반적인 앱들의 경우는 초기 Intro화면만 전체화면을 사용하고 실제 앱구동화면에서는 Status bar를 표시하도록 하여 사용자가 항상 네트워크 연결상태 및 배터리 잔량등을 확인할 수 있도록 해 주는 것이 좋은 화면설계이다.
이를 아래와 같이 적용해보자.
위에서 info.plist 에 Status bar의 hidden속성을 YES로 하여 우선 Intro화면에서는 Status bar가 숨겨긴 상태이니 앱이 로딩되어 메인 화면에 표시될 때 Status bar의 hidden속성을 NO로 변경하여 Status bar를 화면에 표시하도록 한다.
다음과 같이 (ProjectName)AppDelegate.m 파일의 didFinishLaunchingWithOptions: 메소드에
[[
UIApplication sharedApplication]
setStatusBarHidden:
NO]; 를 추가한다.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
- (
BOOL)application:(
UIApplication *)application didFinishLaunchingWithOptions:(
NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[[
UIApplication sharedApplication]
setStatusBarHidden:
NO];
return YES;
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------
앱을 실행시켜보면 Intro화면에는 Status bar 없이 전체화면을 Intro image가 채우고, 앱 구동화면으로 넘어가면서 상단에 Status bar가 나타나는 것을 확인할 수 있을 것이다.
여기서 끝이 아니다. ^^;;
앱을 실행시킨 후 시뮬레이터의 홈버튼을 누르면 홈화면이 나타나면서 앱이 Background로 넘어간다.
홈화면에서 다시 앱을 실행시켜보자.
Background로부터 앱이 다시 실행될때는 Intro image의 상단에 Status bar가 다시 나타날 것이다.
위에서 Status bar의 hidden속성을 NO로 변경했기 때문에 앱이 Background로부터도 완전히 종료되었다가 다시 initialize 되지 않는 한 계속해서 Status bar가 나타나게 되는 것이다.
다음과 같이 applicationDidEnterBackground: 메소드에
[[
UIApplication sharedApplication]
setStatusBarHidden:
YES]; 를 추가하여 앱이 Background로 넘어가면 Status bar를 다시 숨김상태로 변경하자.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
- (
void)applicationDidEnterBackground:(
UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
[[
UIApplication sharedApplication]
setStatusBarHidden:
YES];
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------
빌드하고 앱을 다시 실행시켜보자.
홈버튼을 눌러 앱을 Background로 넘긴 후 홈화면에서 다시 앱을 실행시켜도 Intro image가 전체화면에 나타나는 것을 확인할 수 있을 것이다.
하지만 역시 Background로 들어갈 때 Status bar의 hidden속성을 YES로 변경했기 때문에 Intro화면뿐 아니라 앱 구동화면에서도 Status bar가 나타나지 않는다.
다음과 같이 applicationWillEnterForeground: 메소드에
[[
UIApplication sharedApplication]
setStatusBarHidden:
NO]; 를 추가하여 Background로부터 Foreground로 나올때 Status bar를 다시 나타나도록 한다.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
- (
void)applicationWillEnterForeground:(
UIApplication *)application
{
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
[[
UIApplication sharedApplication]
setStatusBarHidden:
NO];
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------
어떤가.. 이제는 앱이 어떠한 상태에서 실행이 되더라도 Intro화면에는 Status bar가 나타나지 않고 앱 구동화면에서만 Status bar가 나타나도록 수정되었을 것이다. ^^
마지막으로 이번에는 순식간에 지나가는 Intro화면을 원하는 시간동안 화면에 표시되도록 하는 간단한 팁이다.
다음과 같이 didFinishLaunchingWithOptions: 메소드에
[NSThread sleepForTimeInterval:(time)]; 을 추가한다.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[NSThread sleepForTimeInterval:3]; // 3초
[[UIApplication sharedApplication] setStatusBarHidden:NO];
return YES;
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------
time value에 초단위의 값을 입력하면 그 시간만큼 Intro 화면이 보여진 후에 앱의 메인화면으로 넘어갈 것이다.