Używam Katalogu zasobów Xcode 5 i chciałbym użyć mojego LaunchImage
jako obrazu tła mojego widoku głównego (dość powszechna praktyka, aby przejście z „ładowania” do „załadowanego” wyglądało płynnie).
Chciałbym użyć tego samego wpisu w katalogu zasobów, aby zaoszczędzić miejsce i nie musieć replikować obrazu w dwóch różnych zestawach obrazów.
Jednak dzwoniąc:
UIImage *image = [UIImage imageNamed:@"LaunchImage"]; //returns nil
źródło
UIInterfaceOrientationIsLandscape()
zamiast tego.LaunchImages są wyjątkowe i nie są w rzeczywistości katalogiem zasobów na urządzeniu. Jeśli spojrzysz za pomocą iFunBox / iExplorer / etc (lub na symulatorze lub w katalogu kompilacji), możesz zobaczyć ostateczne nazwy, a następnie napisać kod, aby ich użyć - np. w przypadku projektu tylko na iPhone'a z systemem iOS7 spowoduje to ustawienie odpowiedniego obrazu startowego:
Włożyłem to do widokuDidLoad.
To nie jest naprawdę idealne, byłoby wspaniale, gdyby Apple dał nam fajny interfejs API, aby to zrobić.
źródło
Moja aplikacja obsługuje obecnie tylko iOS 7 i nowsze.
Oto jak odwołuję się do obrazu startowego z katalogu zasobów:
Możesz dodać więcej par klucz-wartość, jeśli chcesz obsługiwać starsze wersje systemu iOS.
źródło
UIScreen.mainScreen.bounds
różni się w zależności od aktualnej orientacji interfejsu. Zobacz stackoverflow.com/a/24153540/158525Tutaj kategoria na UIImage oparta na rozwiązaniu zapewnionym przez Cherpak Evgeny powyżej.
UIImage + SplashImage.h :
UIImage + SplashImage.m :
źródło
Odpowiedź @ codeman zaktualizowana dla Swift 1.2:
Aby to nazwać i obsługiwać rotację w iOS 8:
Właśnie tego potrzebowałem, dzięki!
źródło
Właśnie napisałem ogólną metodę uzyskiwania nazwy obrazu powitalnego dla iPhone'a i iPada (krajobraz, portret). U mnie zadziałało. Mam nadzieję, że tobie też pomoże. Napisałem to z pomocą innych odpowiedzi SO, dzięki @Pichirichi za całą listę.
Inne metody narzędziowe to
źródło
[screen.coordinateSpace convertRect:screen.bounds toCoordinateSpace:screen.fixedCoordinateSpace]
ale zrób najpierw sprawdź, czy korzystasz z iOS 8, w przeciwnym razie ulegnie awarii.Szybka wersja odpowiedzi Cherpaka Evgeny:
źródło
Idąc za odpowiedzią @ Pichirich, odniosłem się do mojego obrazu startowego w InterfaceBuilder jako:
„LaunchImage.png”
... a dzięki Xcode 5.0.2 automatycznie pobiera odpowiedni obraz prosto z katalogu zasobów.
To jest to, czego bym się spodziewał - z wyjątkiem okrutnie paskudnego posunięcia Apple'a polegającego na cichej zmianie nazwy „Default.png” na „LaunchImage.png” :)
źródło
nil
po danej inicjalizacjiW dokumentacji jest jasno określone:
„Każdy zestaw w katalogu zasobów ma nazwę . Możesz użyć tej nazwy do programowego załadowania dowolnego pojedynczego obrazu zawartego w zestawie. Aby załadować obraz, wywołaj metodę UIImage: ImageNamed:, przekazując nazwę zestawu zawierającego obraz . ”
Korzystanie z listy Pichirichiego pomaga rozwiązać tę niespójność.
źródło
UIImageView *myView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LaunchImage"]];
Działa świetnie![UIImage imageNamed:..]
wiedzieć, który wybrać?Można łatwo uzyskać dostęp do obrazu uruchamiania za pomocą jednej linii kodu.
Aby uzyskać funkcjonalność przedstawioną powyżej, wykonaj czynności podane poniżej.
Krok 1. Rozszerz
UIImage
klasę, tworząc kategorię i dodaj do niej następującą metodę.Krok 2. Powyższa metoda powinna działać poprzez dodanie następującego kodu również do tej samej kategorii
UIImage
źródło
Zdaję sobie sprawę, że niekoniecznie jest to najlepsze rozwiązanie dla wszystkich, ale najłatwiejszym (i najmniej podatnym na błędy, IMHO) sposobem jest wprowadzenie osobnego wpisu w katalogu Images.xcassets. Nazwałem to
SplashImage
.Idąc do dodawania nowego wpisu, nie wybieraj opcji „Nowy obraz startowy”. Zamiast tego wybierz ogólny „Nowy zestaw obrazów”. Następnie otwórz inspektora i wybierz odpowiednie opcje. Jeśli tworzysz tylko dla urządzeń Retina, tak jak ja, możesz wybrać następujące opcje:
Zostaną ci cztery wpisy (iPhone 4S, iPhone 5 (s, c), iPhone 6 i iPhone 6 Plus).
Pliki odpowiadające obrazom są następujące:
Oczywiście po wykonaniu tej czynności możesz po prostu użyć
[UIImage imageNamed:@"SplashImage"]
źródło
Z pomocą odpowiedzi Pichirichi zaimplementowałem następującą kategorię (iOS 7+): UIImage + AssetLaunchImage
W rzeczywistości jest to niewiele więcej niż generowanie nazwy w locie, ale prawdopodobnie będzie pomocne.
źródło
Zaktualizowano do najnowszej składni Swift (Swift 5)
źródło