iOS 8 wprowadza klasę UIImageAsset z metodą registerImage:withTraitCollection:
. Jak korzystać z tej klasy?Jak korzystać z UImageAsset w iOS 8
Odpowiedz
Zazwyczaj nie trzeba. Zamiast tego użyjesz katalogu zasobów. UIImageAsset, w systemie iOS 8, jest po prostu mechanizmem leżącym u podstaw zestawów obrazów w katalogach zasobów.
Na przykład w systemie iOS 8 katalog zasobów może rozróżniać wersje obrazów przeznaczonych dla różnych klas wielkości, korzystając z wyskakujących menu Szerokość i Wysokość, aby określić różne możliwości klasy wielkości. Następnie, gdy używasz obrazu z katalogu zasobów w interfejsie, właściwa rzecz dzieje się automatycznie. Jeśli korzystamy z iPhone'a z aplikacją obróconą do orientacji poziomej, i jeśli w zestawie obrazów dostępna jest zarówno wysokość dowolna, jak i opcja wysokości kompaktowej, używana jest wersja o wysokości kompaktowej. Te funkcje są dostępne na żywo; jeśli aplikacja obraca się od pionu do portretu, a w zestawie obrazów dostępna jest zarówno wysokość dowolna, jak i opcja Wysokość kompaktowa, wersja o wysokości kompaktowej to zastąpiona z wersją Dowolna wysokość w interfejsie, automatycznie.
Zauważysz, że nie wspomniałem o UIImageAsset. Jednak UIImageAsset jest mechanizmem bazowym. Gdy obraz jest pobierany z katalogu zasobów przez init(named:)
i nazwę jego zestawu obrazów, jego właściwość imageAsset
jest zestawem UIImageAsset. Wszystkie obrazy w tym zestawie obrazów są dostępne za pośrednictwem zestawu UIImageAsset; każdy obraz ma przypisaną kolekcję cech (jej traitCollection
) i można zapytać UIImageAsset o obraz odpowiedni dla określonego zbioru cech, wywołując imageWithTraitCollection:
. W rzeczywistości jest to dokładnie to, co interfejs robi dla ciebie. Obiekt interfejsu, który może wyświetlać obraz, automatycznie rozpoznaje cechy w systemie iOS 8; odbiera komunikat traitCollectionDidChange:
i odpowiednio reaguje.
Jednak możliwe jest również łączenie zdjęć z własnym zestawem UIImageAsset. . W pewnym sensie jest to jak tworzenie katalogu zasobów (lub przynajmniej zestawu obrazów) w kodzie! W tym przykładzie pobieram dwa obrazy z pakietu aplikacji i konfiguruję je tak, aby jeden był używany, gdy aplikacja jest orientacji pionowej, a drugi jest używany, gdy aplikacja jest orientacja pozioma, automatycznie:
let tcdisp = UITraitCollection(displayScale: UIScreen.mainScreen().scale)
let tcphone = UITraitCollection(userInterfaceIdiom: .Phone)
let tcreg = UITraitCollection(verticalSizeClass: .Regular)
let tc1 = UITraitCollection(traitsFromCollections: [tcdisp, tcphone, tcreg])
let tccom = UITraitCollection(verticalSizeClass: .Compact)
let tc2 = UITraitCollection(traitsFromCollections: [tcdisp, tcphone, tccom])
let moods = UIImageAsset()
let frowney = UIImage(named:"frowney")
let smiley = UIImage(named:"smiley")
moods.registerImage(frowney, withTraitCollection: tc1)
moods.registerImage(smiley, withTraitCollection: tc2)
Po tym, jeśli frowney
zostanie umieszczony w interfejsie - na przykład, przekazując go do UIImageView jako jego obraz lub przypisując go jako obraz UIButtonu - jest on automatycznie zmieniany z , gdy aplikacja zmienia orientację.
Niezwykłe jest to, że ta magia działa chociaż nie ma trwałe odniesienie do frowney
, smiley
lub UIImageAsset (moods
). Powodem jest to, że frowney
i smiley
są buforowane przez system (z powodu połączenia z init(named:)
) i każde z nich utrzymuje silne odniesienie do zestawu UIImageAsset, z którym są one zarejestrowane.
- 1. Jak korzystać z CoreData w Xcode 8?
- 2. Jak korzystać z MQTT w systemie iOS?
- 3. Jak korzystać z AVSampleBufferDisplayLayer w iOS 8 dla strumieni RTP H264 z GStreamerem?
- 4. iOS: Jak korzystać MPMoviePlayerController
- 5. Jak korzystać z UTF-8 w PDFKit w Rails?
- 6. iOS Jak korzystać z prywatnego interfejsu API?
- 7. Jak korzystać z setKeepAliveTimeout: handler - IOS?
- 8. Jak korzystać z ProgressRing w Windows Phone 8
- 9. Jak korzystać z UIRemoteNotificationTypeVoIP?
- 10. Alamofire w Swift 3 z iOS 8
- 11. keyboardWillShow w systemów iOS 8 z UIKeyboardWillShowNotification
- 12. Jak zrobić UINavigationBar Transparent w IOS 8?
- 13. Uniwersalny link w iOS 8?
- 14. Jak korzystać z funkcji "otwórz w ..." w aplikacji na iOS?
- 15. setHTTPBody w iOS 8 + Swift
- 16. Problemy z UIDatePicker w popover na iOS 8
- 17. klienta w iOS 8 - Swift
- 18. Jak prawidłowo korzystać z narzędzia CFNotificationCenterAddObserver w Swift na iOS
- 19. Jak korzystać z pList w programowaniu na iOS
- 20. Jak korzystać z usługi PositionService w Gluon Mobile na iOS?
- 21. Jak korzystać z widoku kontenera w systemie iOS?
- 22. Jak korzystać z asl.h w plikach swift-ios
- 23. iOS - Jak korzystać z dziedziczenia w komórce niestandardowej?
- 24. Jak korzystać z programu pjsip w moim własnym projekcie iOS?
- 25. Jak korzystać z 9-plasterkowych obrazów w IOS?
- 26. ptrace na iOS 8
- 27. Jak korzystać ValueConverter jak StaticResource w Windows Phone 8
- 28. EXC_BAD_ACCESS tylko na xcode 8 z systemem iOS 8
- 29. Jak korzystać z boost :: spirit do parsowania UTF-8?
- 30. iOS 8 NSInternalInconsistencyException
Znakomita ekspansja! – seeker12