2013-06-11 3 views
1

안녕하세요, 저는 iPhone 5 및 iPhone 4/4 용 앱을 개발하려고합니다. 스토리 보드를 사용할 때 문제가 있습니다. iPhone 4/4s의 스토리 보드를 디자인했지만 iPhone 5에서 GUI를 사용하면 ... 가장 쉬운 해결책은 스토리 보드 2 개를 사용하는 것입니다. 하나는 망막 4, 다른 하나는 망막 3.5. 코드별로 다른 스토리 보드를 호출 할 수있는 방법을 묻고 싶습니다. 나는 2 스토리 보드 파일 생성 :망막과 망막을 관리하는 다중 스토리 보드 3.5

MainStoryboard.storyboard 
MainStoryboardiPhone5.stroryboard 

가 나는 장치의 화면 크기를 얻어 다른 스토리 보드를로드해야합니다 인터넷에서 발견,하지만 난 그 어디서해야합니까? 난 단지 내가 발견 다른 스토리 보드를 호출 할 수있는 방법을 찾아야한다

이제
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     if (screenBounds.size.height == 568) { 
      NSLog(@"retina 4"); 
     } else { 
      NSLog(@"retina 3.5"); 
     } 
     return YES; 
    } 

:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

디스플레이의 크기를 감지하는 방법 Appdelegate.m에서 나는 웹에이 코드를 설립 망막 4 또는 망막 3.5. 올바른 스토리 보드를 호출하려면 어떻게해야합니까? 는 아이폰 5의 화면이에게 아이폰 5를 확인하기 위해 당신은 단순히이 매크로를 사용할 수 있습니다 (568)

의 높이가

답변

11

감사 :

아이폰에 대한 AppDelegate.m 검사에서 다음
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) 

5 그 스토리 보드를로드하십시오.

:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *mainStoryboard = nil; 
    if (IS_IPHONE_5) { 
     mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboardiPhone5" bundle:nil]; 
    } 
    else { 
     mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    } 

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.rootViewController = [mainStoryboard instantiateInitialViewController]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

UPDATE : 다음 매크로

당신의 앱 위임에서 지금
// Check if device is iPhone 5 
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) 

// Get the storyboard name according to the device 
#define GET_STORYBOARD_NAME(controllerName) IS_IPHONE_5 ? controllerName : [NSString stringWithFormat:@"%@-iPhone4",controllerName] 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard * storyboard = [UIStoryboard storyboardWithName:GET_STORYBOARD_NAME(@"Main") bundle:nil]; 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.rootViewController = [storyboard instantiateInitialViewController]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

주 사용

17,451,515,항상 아이폰 4의 스토리 보드 이름이 형식

YourStoryboardName-iPhone4.storyboard

+0

좋아,하지만 화면 크기를 올바르게 감지 했습니까? 나는 그것을 발견했다 : if (screenBounds.size.height == 568) { NSLog ("Retina 4"); } else { NSLog ("Retina 3.5"); } 내가 게시 한 코드는 IOS 버전을 감지하지 못했습니까? IOS 6에서만 화면 크기를 얻을 수 있다는 것을 알고 있습니다. – lucgian841

+0

예.귀하의 NSLog는 귀하의 기대 값에 따라 인쇄되고 있습니다 – icodebuster

+0

또한 귀하의 솔루션을 사용해야하고 오른쪽 안의 화면 크기 감지 기능을 추가해야합니까? – lucgian841

2

나는 당신이 요구하는지 정말로 알고에 있어야하지만, 자동 레이아웃과 끈기 정말 가치가있다. 보기가 너무 다른 경우가 아니라면 (예 : 다른 그래픽을 사용하는 등) AutoLayout은 물건을 재배치하여 거의 모든 것을 처리 할 수 ​​있습니다. 처음에는 레이아웃 항목에 대해 정적 위치를 사용하지 않으므로 시작하기가 까다로 우며 다른 모든 항목 (수퍼 뷰, 기타 ​​항목 등)에 상대적으로 물건을 배치하는 방법에 대한 의도를 알려주는 방식으로 작동합니다. 온라인 튜토리얼 (Ray Wenderlich's 하나가 아주 좋습니다)을 확인하십시오.

+0

동의. 사실 나는 또한 포스트를 스크롤 다운하기 전에 같은 것을 궁금해했다. @ manman은 내가 생각하는 올바른 지적을 가지고있다. – Tarun

관련 문제