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;
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
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
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