Jak mogę utworzyć UIColor
z szesnastkowego formatu łańcucha, takiego jak #00FF00
?
ios
cocoa-touch
uicolor
Rupesz
źródło
źródło
Odpowiedzi:
Znalazłem najprostszy sposób, aby to zrobić za pomocą makra. Wystarczy umieścić go w nagłówku, aby był dostępny w całym projekcie.
uicolor makro z wartościami szesnastkowymi
Również sformatowana wersja tego kodu:
Stosowanie:
źródło
Zwięzłe rozwiązanie:
źródło
if ( [hexString rangeOfString:@"#"].location == 0 )
przedsetScanLocation
wierszem, aby uczynić#
opcjonalnym.Mam rozwiązanie, które jest w 100% zgodne z ciągami formatu szesnastkowego używanymi przez system Android, co okazało się bardzo pomocne podczas tworzenia aplikacji mobilnych na wiele platform. Pozwala mi używać jednego koloru podniebienia dla obu platform. Możesz użyć ponownie bez przypisania lub na podstawie licencji Apache, jeśli wolisz.
źródło
colorComponentFrom:start:length:
nie powinieneśreturn hexComponent / 0xFF; // divide by 255, not 256
? Największa wartość heksadecymalna, którą powinieneś odzyskać, to 0xFF, a więc to właśnie powinieneś podzielić przez 0xFF (255).[@"#538aa4" toColor]
Jest fajny post, w jaki sposób odpowiedzieć na pytanie OP dotyczące wyodrębnienia
UIColor
sznurka heksadecymalnego. Rozwiązanie przedstawione poniżej różni się od innych, ponieważ obsługuje wartości ciągów, które mogą zawierać prefiks „0x” lub „#” w reprezentacji ciągu szesnastkowego ... (patrz użycie)Oto główny kawałek ...
Metoda pomocnicza ...
Stosowanie:
Pełny artykuł referencyjny
Swift 2+
Przeniesiłem to rozwiązanie do Swift 2.2. Zauważ, że zmieniłem
alpha
parametr, aby używał domyślnego ustawienia 1.0. Zaktualizowałem również typ intUInt32
zgodnie z wymaganiamiNSScanner
klasy w Swift 2.2.Swift 4+
Używając tej samej logiki ze zmianami zastosowanymi w swift 4,
źródło
alpha
aby kiedykolwiek mieć wartość zero? Ponieważ ta metoda daje ludziom taką możliwość, a jeśli ktoś zdecyduje się ustawićalpha
na zero, wymuszone rozpakowanie tej opcjonalnej opcji niezmiennie doprowadzi do awarii. Nie edytowałem go jednak na wypadek, gdyby nie było jakiegoś uzasadnienia, którego nie jestem świadomy.Jest to funkcja, która pobiera ciąg szesnastkowy i zwraca kolor UIColor.
(Możesz wprowadzić ciągi szesnastkowe w dowolnym formacie:
#ffffff
lubffffff
)Stosowanie:
Swift 4:
Swift 3:
Swift 2:
Źródło: arshad / gist: de147c42d7b3063ef7bc
źródło
Użyj tej kategorii:
w pliku UIColor + Hexadecimal.h
w pliku UIColor + Hexadecimal.m
W klasie chcesz go użyć:
i:
źródło
Świetna implementacja Swift (zaktualizowana do Xcode 7) przy użyciu rozszerzeń, zebranych z różnych odpowiedzi i miejsc. Będziesz także potrzebować rozszerzeń ciągów na końcu.
Posługiwać się:
UWAGA: Dodałem opcję 2 dodatkowych cyfr na końcu standardowej 6-cyfrowej wartości szesnastkowej dla kanału alfa (wartość przekazu
00
-99
). Jeśli cię to obraża, po prostu ją usuń. Można go zaimplementować, aby przekazać opcjonalny parametr alfa.Rozbudowa:
Rozszerzenia ciągów:
Źródło zmiennoprzecinkowe Źródło
indeksów dolnych
źródło
countElements()
został zastąpionycount()
w Swift 1.2, jest wbudowany w język. Zaktualizowałem swoją odpowiedź, aby to odzwierciedlić.Możesz zrobić takie rozszerzenie
I używaj go gdziekolwiek tak
źródło
#00FF00
wyraźnie ma być ciągiem znaków. Jak powiedzieli inni, jest to proste, zwięzłe. Ale jeśli nie zajmuje się łańcuchami, nie może odpowiedzieć na pytanie, w jaki sposób radzić sobie z łańcuchami.Nie ma wbudowanej konwersji z łańcucha szesnastkowego na
UIColor
(lubCGColor
), o czym jestem świadomy. Możesz jednak z łatwością napisać w tym celu kilka funkcji - na przykład zobacz rozwój iPhone'a z dostępem do komponentów uicolorźródło
+colorWithHexString:
nie działa. Przynajmniej w moim przypadku. :)Znalazłem do tego dobrą
UIColor
kategorię, UIColor + PXExtensions .Stosowanie:
UIColor *mycolor = [UIColor pxColorWithHexValue:@"#BADA55"];
I tak na wszelki wypadek, gdy link do mojej treści nie powiedzie się, oto aktualny kod implementacyjny:
źródło
szybka wersja. Użyj jako funkcji lub rozszerzenia.
Funkcjonować Rozbudowa Jak zadzwonić Możesz także zdefiniować swójHex Color
konstruktor interfejsu.źródło
To kolejna alternatywa.
źródło
Możesz użyć różnych narzędzi online do konwersji łańcucha HEX na rzeczywisty kolor UIC. Sprawdź uicolor.org lub UI Color Picker . Dane wyjściowe zostaną przekonwertowane na kod Celu C, na przykład:
Które możesz osadzić w swojej aplikacji. Mam nadzieję że to pomoże!
źródło
SWIFT 4
Możesz stworzyć fajnego
convenience
konstruktora w takim rozszerzeniu:I użyj go później jak
źródło
Stosowanie:
źródło
To miłe z obsługą cocoapod
https://github.com/mRs-/HexColors
źródło
Kolejna wersja z alfa
źródło
Szybki odpowiednik odpowiedzi @ Toma, chociaż odbiera wartość Int RGBA w celu obsługi przezroczystości:
A jeśli chcesz móc używać go z łańcucha, możesz użyć strtoul:
źródło
Oto
Swift 1.2
wersja napisana jako rozszerzenie doUIColor
. To pozwala ci to zrobićKtóry uważam za najbardziej naturalny sposób na zrobienie tego.
źródło
let greenRange = ...
, otrzymuję wyjątek:fatal error: can not increment endIndex
Kolejna realizacja pozwalając sznurki jak
"FFF"
albo"FFFFFF"
i za pomocą alfa:źródło
zaktualizowano do wersji swift 1.2
źródło
Utwórz eleganckie rozszerzenie dla
UIColor
:Utwórz czerwony kolor:
źródło
źródło
źródło
Lubię kolor oprócz koloru, więc piszę własną kategorię
łatwy w użyciu w ten sposób
źródło
Stworzyłem dla tego wygodną inicjację:
możesz utworzyć UIColor w dowolnym miejscu swojego projektu, tak jak to:
mam nadzieję że to pomoże...
źródło
Możesz utworzyć klasę rozszerzenia UIColor jako: -
rozszerzenie UIColor {
// ZNAK: - getColorFromHex / ** Ta funkcja konwertuje kolorowy kod Hex na RGB.
}
źródło
Dla szybkiego 2.0+. Ten kod działa dla mnie dobrze.
Ten kod obejmuje sprawdzanie formatu ciągu. na przykład
I o ile wiem, mój kod nie jest niekorzystny, ponieważ utrzymuje semantię stanu awaryjnego i zwraca wartość opcjonalną. I to powinna być najlepsza odpowiedź.
źródło
Oto wersja rozwiązania Swift 2.0 , które będzie obsługiwać wartość alfa koloru i z doskonałą obsługą błędów:
źródło
Stosowanie
źródło