2015-10-05 9 views
7

Widziałem różne stare posty dotyczące rozmiarów zdjęć, ale nie mogę znaleźć niczego na czasie, a nawet wiem, czy jest to możliwe w przypadku tylko katalogu zasobów, aby dostarczyć obrazy dla wszystkich rozmiarów ekranu iPada i iPhone'a.Xcode 7, obsługa uniwersalnych obrazów tła w katalogu urządzeń?

Jest to najlepszy po znalazłem, ale w Xcode 7 nie pokazuje "Retina 4 2x" lub iPhone 6/6+

Xcode 6 - xcassets for universal image support

w Xcode 7 jest opcja uniwersalna, ale te trzy obrazy nie obsługują wszystkich rozmiarów urządzeń.

Widziałem opcje, w których można udostępniać własne obrazy poza katalogiem zasobów, ale chciałbym użyć katalogu zasobów.

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

EDIT: Wygląda na to, że mogę iść do trasy katalogowej atutem żaden :(

A)

Chciałbym w przyszłości dowód tego rozwiązania, więc cofa się, a jeśli trzeba, zmienia rozmiar najbardziej odpowiedniego obrazu, ponieważ nie jestem pewien, czy to nastąpi.

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

B)

Albo ten kod jest lepiej? Chociaż nie jestem pewien, z jakimi rozmiarami się to wiąże, jest on również nieco nieaktualny, ponieważ nie obsługuje obrazów 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 

Wsparcie pochodzi z https://github.com/Daij-Djan/DDUtils

C)

to również wygląda dobrze, ale to ponownie klejący i nie używając rzeczywistych ostry obraz i nie ma spaść z powrotem.

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

Pytam to samo pytanie ************ i nikt nie wydaje się troszczyć. To jest bardzo ważne, dlaczego nikt nie odpowiada? (Btw co robiłeś z obrazkami dla iPadów ...?) – durazno

+0

Skończyło się na tym, że użyłem kodu malarskiego, aby narysować moje tło w faktach, które zastąpiłem wszystkie moje obrazy.W moim przypadku potrzebuję dużo zmienić rozmiar rzeczy, więc regenerowanie obrazów było niepraktyczne. – Jules

+0

Więc zdecydowałeś się nieco obniżyć jakość swoich zdjęć i zminimalizować rozmiar pliku binarnego ..? To, czego szukam, jest rozwiązaniem dla obu. Nie chcę tracić jakości ani trochę, a jednocześnie nie chcę uzyskać rozmiaru binarnego ... – durazno

Odpowiedz

0

Właśnie zmodyfikowany plik Contents.json i dodał siatkówce 4 2x:

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

a Retina 4 2x pojawiła się w katalogu Assets dla tego obrazu ustawione :)

Aby udostępnić różne obrazy dla iPhone'a i iPada, wystarczy zaznaczyć pola wyboru iPhone i iPad w sekcji Urządzenia i odznaczyć opcję Universal o ne.

Jednak nadal nie wiem, jak obsługiwać iPhone'a 6. Zawsze miałem inny zestaw zdjęć dla iPhone 6 z jednym obrazem i sprawdziłem kod, jeśli urządzenie to iPhone6 ​​lub iPhone6 ​​Simulator i ustawiłem ten obraz zamiast.

Powiązane problemy