2015-10-05 2 views
7

Ich habe verschiedene alte Beiträge in Bezug auf Bildgrößen gesehen, aber ich kann nichts aktuelles finden oder sogar wissen, ob es mit nur Asset-Katalog möglich ist, Bilder für alle iPad und iPhone Bildschirmgrößen zur Verfügung zu stellen.Xcode 7, Asset-Katalog universelles Gerät Hintergrundbild Unterstützung?

Dies ist der beste Beitrag den ich gefunden habe, aber in Xcode 7 es zeigt nicht "Retina 4 2x" oder das iPhone 6/6+

Xcode 6 - xcassets for universal image support

In Xcode 7 gibt es eine universelle Option, aber die drei Bilder unterstützen nicht alle Gerätegrößen.

Ich habe Optionen gesehen, wo Sie Ihre eigenen Bilder außerhalb des Asset-Katalogs bereitstellen können, aber ich würde gerne den Asset-Katalog verwenden.

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

EDIT: Es sieht aus wie ich muss für die keine Asset-Katalog Weg gehen könnte :(

A)

ich diese Lösung zukunftssicher möchten, so ist es fällt zurück und wenn nötig, skaliere das passendste Bild, so wie es ist, bin ich mir nicht sicher, wird passieren.

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

B)

Oder vielleicht dieser Code ist besser? Obwohl ich nicht sicher bin, auf welche Größen es sich bezieht, ist es auch ein wenig veraltet, da es x3-Bilder nicht unterstützt?

#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 

Haftungsausschluss: genommen von https://github.com/Daij-Djan/DDUtils

C)

Das sieht auch gut, aber es ist wieder Sizing und nicht unbedingt scharfe Bilder mit und es gibt keinen Fall zurück.

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

Ich frage die gleiche ************ Frage und niemand scheint sich darum zu kümmern. Das ist wie, super wichtig warum antwortet niemand? (Btw was hast du am Ende mit Bildern für iPads gemacht??) – durazno

+0

Ich habe am Ende malen Code verwendet, um meine Hintergründe in Fakten zu zeichnen Ich habe so ziemlich alle meine Bilder ersetzt.In meinem Fall muss ich die Größe der Dinge sehr anpassen, so dass das Regenerieren von Bildern unpraktisch war. – Jules

+0

Sie haben also beschlossen, die Qualität Ihrer Bilder ein wenig zu verlieren und die Größe der Binärdatei zu minimieren ..? Was ich suche, ist eine Lösung für beide. Ich will nicht die Qualität nicht ein bisschen verlieren und auch nicht gleichzeitig binäre Größe zu gewinnen ... – durazno

Antwort

0

Ich veränderte nur die Contents.json Datei und hinzugefügt, um die Retina 4 2x:

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

Und die Retina 4 2x erschien für das Bild in Assets Katalog zurück gesetzt :)

Um verschiedene Bilder für iPhone und iPad zur Verfügung zu stellen, müssen Sie nur die Kontrollkästchen iPhone und iPad im Abschnitt Geräte auswählen und die Option Universal deaktivieren ne.

Allerdings weiß ich immer noch nicht, wie man mit dem iPhone 6 umgeht. Ich hatte immer ein anderes Bild für iPhone 6 mit nur einem Bild und checkte den Code ein, wenn das Gerät ein iPhone6 ​​oder iPhone6 ​​Simulator ist und dieses Bild einstellt stattdessen.