2012-04-12 63 views
8

Tôi đang phát triển một ứng dụng sử dụng iOS 5.1 và tôi đang gặp phải một số hành vi lạ với các tệp default.png.iOS 5.1 và Default.png

Tôi đã thêm các tập tin sau đây để ứng dụng của tôi:

Default.png - (iPhone)

[email protected] - (iPhone Retina)

Default-Portrait ~ ipad .png - (iPad)

[email protected]~ipad.png - (iPad Retina)

Khi ứng dụng bắt đầu có vẻ như nó chọn đúng hình ảnh Default.png để sử dụng cho từng dịp. Tuy nhiên, trong appdelegate của tôi, tôi có một màn hình giật gân đơn giản để làm mượt tải của ứng dụng và chuyển đổi sang các ứng dụng, làm một cái gì đó như:

UIImageView *splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,window.frame.size.width, window.frame.size.height)]; 
splashView.image = [UIImage imageNamed:@"Default"]; 

[window addSubview:splashView]; 
[window bringSubviewToFront:splashView]; 

Tuy nhiên [UIImage imageNamed:@"Default"] lần lượt không chọn đúng file cho mỗi thiết bị và tôi tin rằng vấn đề là phần -Portrait của tên tệp.

Vì vậy, như một giải pháp nhanh chóng tôi đã làm điều này:

if(([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)) { 
    // Force the image used by ipads 
    if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) { 
     splashView.image = [UIImage imageNamed:@"[email protected]~ipad"]; 
    } 
    else { 
     splashView.image = [UIImage imageNamed:@"Default-Portrait~ipad"]; 
    } 
} 
else 
    splashView.image = [UIImage imageNamed:@"Default"]; 

Đây có phải là làm thế nào tôi nên làm điều này? Điều này có vui không?

+0

Điều này có vui cho bạn không? đó là vui – Krishnabhadra

+0

Hãy thử một số NSLogging để xem chính xác những gì đang xảy ra. –

+0

@rokjarc Làm thế nào bạn có thể NSLog tệp nào được chọn bởi SDK khi bạn thực hiện một đơn giản '[UIImage imageNamed: @" Default "]'? – mobius

Trả lời

4

Để biết thông tin chính thức ở đây có một cái nhìn tại địa chỉ: App-Related Resources

Đối với hình ảnh Launch sử dụng định dạng này:

<basename><orientation_modifier><scale_modifier><device_modifier>.png 

Có vẻ bạn sẽ tốt hơn bằng cách sử dụng:

Default.png - (iPad) 

[email protected] - (iPad Retina) 

Default~iphone.png - (iPhone) 

[email protected]~iphone.png -(iPhone Retina) 

này nên cung cấp cho bạn hình ảnh phù hợp ngay cả khi chỉ sử dụng đơn giản:

splashView.image = [UIImage imageNamed:@"Default"]; 
+1

'- [UIImage imageNamed:]' không hoạt động - như @mobius được đánh dấu, vấn đề là với công cụ sửa đổi định hướng. Vì vậy, một cái gì đó như Mặc định ~ ipad.png sẽ làm việc nhưng Default-Portrait ~ ipad.png không hoạt động với '- [UIImage imageNamed:]' (mặc dù lúc khởi động iPad không nhận được hình ảnh bên phải). –

0

http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html

 
App Launch (Default) Images 
<basename><usage_specific_modifiers><scale_modifier><device_modifier>.png 

Providing Launch Images for Different Orientations 
<basename><orientation_modifier><scale_modifier><device_modifier>.png 

Providing Launch Images for Custom URL Schemes 
<basename>-<url_scheme><scale_modifier><device_modifier>.png 
2

Khi ứng dụng toàn cầu của tôi đã tải xong, tôi hiển thị một bản sao của màn hình khởi động trong một UIImageView và sau đó mờ dần nó ra, để cung cấp cho một sự chuyển tiếp nhẹ nhàng giữa phóng và ứng dụng là sẵn sàng. Đây là mã mà tôi sử dụng để xác định hình ảnh sẽ sử dụng:

// choose the correct launch image for orientation, device and scale 
    NSMutableString *launchImageName = [[NSMutableString alloc] initWithString:@"Default"]; 
    BOOL isPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); 
    if(isPad) 
    { 
     BOOL isLandscape = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]); 
     NSString *imageOrientation = (isLandscape) ? @"Landscape" : @"Portrait"; 

     BOOL isRetina = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0); 
     NSString *scaleString = (isRetina) ? @"@2x" : @""; 

     // Default-Landscape~ipad.png 
     // [email protected]~ipad.png 
     // Default-Portrait~ipad.png 
     // [email protected]~ipad.png 
     launchImageName = [NSMutableString stringWithFormat:@"%@-%@%@~ipad.png", launchImageName, imageOrientation, scaleString ]; 

    } else { 

     if(CGRectGetHeight(self.view.frame) > 480.f) 
     { 
      // Default-568h.png 
      launchImageName = [NSMutableString stringWithFormat:@"%@-568h.png", launchImageName]; 
     } else { 
      // Default.png 
      // [email protected] 
      launchImageName = [NSMutableString stringWithFormat:@"%@.png", launchImageName]; 
     } 
    } 
    UIImage *launchImage = [UIImage imageNamed:launchImageName]; 
Các vấn đề liên quan