2015-10-05 5 views
7

Ho visto vari vecchi post relativi alle dimensioni delle immagini, ma non riesco a trovare nulla di aggiornato o addirittura sapere se è possibile con il solo catalogo delle risorse fornire immagini per tutte le dimensioni dello schermo di iPad e iPhone.Xcode 7, supporto per le immagini di sfondo del dispositivo universale?

Questo è il miglior messaggio che ho trovato, ma in Xcode 7 non mostra "Retina 4 2x" o iPhone 6/6+

Xcode 6 - xcassets for universal image support

in Xcode 7 c'è un opzione universale, ma le tre immagini non supportano tutte le dimensioni del dispositivo.

Ho visto le opzioni in cui è possibile fornire le proprie immagini al di fuori del catalogo delle risorse, ma mi piacerebbe davvero utilizzare il catalogo delle risorse.

How to use xcassets/universal background images for different iPhones/iPads?

EDIT: Sembra che avrei potuto andare per la strada nessuno catalogo patrimoniale :(

A)

vorrei prova di futuro questa soluzione, in modo da ricade e, se necessario, ridimensiona l'immagine più appropriata, poiché non sono sicuro che accadrà.

NSNumber *screenWidth = @([UIScreen mainScreen].bounds.size.width); 
NSString *imageName = [NSString stringWithFormat:@"name-%@w", screenWidth]; 
UIImage *image = [UIImage imageNamed:imageName]; 

B)

O forse questo codice è meglio? Anche se non sono sicuro delle dimensioni a cui questo si riferisce, è anche un po 'obsoleto in quanto non supporta le immagini x3?

#import <UIKit/UIKit.h> 

@interface UIImage (DefaultImage) 

// uses statusbar orientation 
+ (UIImage *)defaultImage; 

//uses given orientation 
+ (UIImage *)defaultImageForOrientation:(UIInterfaceOrientation)orient; 

@end 

@implementation UIImage (DefaultImage) 

+ (UIImage *)defaultImage { 
    return [self defaultImageForOrientation:[[UIApplication sharedApplication] statusBarOrientation]]; 
} 

+ (UIImage *)defaultImageForOrientation:(UIInterfaceOrientation)orient { 
    // 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(orient); 
     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:@"%@-%@%@.png", launchImageName, imageOrientation, scaleString];  
    } else { 
     if (CGRectGetHeight([UIScreen mainScreen].bounds) > 480.f) { 
      // Default-568h.png 
      launchImageName = [NSMutableString stringWithFormat:@"%@-568h.png", launchImageName]; 
     } else { 
      // Default.png 
      // [email protected] 
      launchImageName = [NSMutableString stringWithFormat:@"%@.png", launchImageName]; 
     } 
    } 
    return [UIImage imageNamed:launchImageName]; 
} 

@end 

responsabilità: tratto da https://github.com/Daij-Djan/DDUtils

C)

Questo sembra anche un bene, ma è ri-dimensionamento e non utilizzando immagini reali nitide e non c'è caduta indietro.

https://gist.github.com/kevindelord/fe2e691d06ab745fbb00

NSString *extension = @"";  // iPhone 3GS and earlier 
if (scale == 3.f) { 
    extension = @"@3x";   // iPhone 6 Plus 
} else if (scale == 2.f && h == 568.0f && w == 320.0f) { 
    extension = @"[email protected]"; // iPhone 5, 5S, 5C 
} else if (scale == 2.f && h == 667.0f && w == 375.0f) { 
    extension = @"[email protected]"; // iPhone 6 
} else if (scale == 2.f && h == 480.0f && w == 320.0f) { 
    extension = @"@2x";   // iPhone 4, 4S 
} else if (scale == 1.f && h == 1024.0f && w == 768.0f) { 
    extension = @"-512h";  // iPad Mini, iPad 2, iPad 1 
} else if (scale == 2.f && h == 1024.0f && w == 768.0f) { 
    extension = @"[email protected]"; // iPad Mini 3, iPad Mini 2, iPad Air, iPad Air 2 
} 
return extension; 
+0

Sto chiedendo la stessa domanda ************ e a nessuno sembra importare. Questo è come, super importante perché nessuno risponde? (A proposito, cosa hai finito con le immagini per iPad?) – durazno

+0

Ho finito con l'uso del codice vernice per disegnare i miei sfondi in effetti ho praticamente sostituito tutte le mie immagini.Nel mio caso ho bisogno di regolare molto le dimensioni delle cose, quindi le immagini rigeneranti erano poco pratiche. – Jules

+0

Quindi hai deciso di perdere un po 'la qualità delle tue immagini e minimizzare le dimensioni del file binario ...? Quello che sto cercando è una soluzione per entrambi. Non voglio perdere la qualità non un po 'e allo stesso tempo non voglio guadagnare dimensioni binarie ... – durazno

risposta

0

Ho appena modificato il file Contents.json e aggiunto il Retina 4 2x:

{ 
     "idiom" : "iphone", 
     "filename" : "[email protected]", 
     "subtype" : "retina4", 
     "scale" : "2x" 
} 

e la retina 4 2x è apparso di nuovo del patrimonio catalogo per quell'immagine set :)

Per fornire immagini diverse per iPhone e iPad è sufficiente selezionare le caselle di controllo dell'iPhone e dell'iPad sotto la sezione Dispositivi e deselezionare la Universal o ne.

Tuttavia, non so ancora come gestire l'iPhone 6. Ho sempre avuto un set di immagini diverso per iPhone 6 con una sola immagine e ho controllato il codice se il dispositivo è un simulatore iPhone6 ​​o iPhone6 ​​e l'ho impostato anziché.

Problemi correlati