Ostrzegamy, że ta metoda powiedzie się tylko wtedy, gdy kolor początkowy będzie w „kompatybilnej przestrzeni kolorów”, która może się różnić w zależności od urządzenia / systemu operacyjnego. Na przykład właśnie odkryłem, że wywołanie tego w [UIColor darkGrayColor] nie powiedzie się na iPadzie 2 z systemem iOS 7. Jednak ten sam kolor działa dobrze na iPadzie Air z systemem iOS 8.
devios1
@ devios1 Można to prawdopodobnie rozwiązać, najpierw serializując kolor, a następnie deserializując go za pomocą NSKeyedArchiver, na przykład:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
Albert Renshaw
40
SWIFT 3 i 4
Odkryłem, że składniki cgColor.com nie zawsze zwracały 4 wartości kolorów, więc zmieniłem to, aby pobierało je z opakowania CIColor
czy nie wygenerowało ostrzeżenia o próbie niejawnego rzutowania CGFloat na float? :)
braden
5
UIColor*color =[[UIColor greenColor] retain];//line 1//OR(You will have color variable either like line 1 or line 2)
color = curView.backgroundColor;//line 2CGColorRef colorRef =[color CGColor];int _countComponents =CGColorGetNumberOfComponents(colorRef);if(_countComponents ==4){constCGFloat*_components =CGColorGetComponents(colorRef);CGFloat red = _components[0];CGFloat green = _components[1];CGFloat blue = _components[2];CGFloat alpha = _components[3];NSLog(@"%f,%f,%f,%f",red,green,blue,alpha);}[color release];
Od iOS 2.0 znajduje się prywatny sposób na przykład UIColoro nazwie styleString, która zwraca ciąg znaków reprezentujący RGB lub RGBA koloru, nawet dla takich jak whiteColor kolorów spoza przestrzeni RGB.
W Swift można użyć nagłówka mostkującego, aby udostępnić interfejs. W przypadku czystego Swift będziesz musiał utworzyć @objcprotokół metodą prywatną i unsafeBitCastUIColorprotokołem:
Korzystanie z HandyUIKit sprawia, że jest to naprawdę łatwe :
importHandyUIKitlet color =UIColor(red:0.1, green:0.2, blue:0.3, alpha:0.4)// get any of the rgba values
color.rgba.red // => 0.1
color.rgba.green // => 0.2
color.rgba.blue // => 0.3
color.rgba.alpha // => 0.4
Istnieje również podobna opcja pobierania hsbawartości :
let color =UIColor(hue:0.1, saturation:0.2, brightness:0.3, alpha:0.4)// you can get any of the hsba values, too
color.hsba.hue // => 0.1
color.hsba.saturation // => 0.2
color.hsba.brightness // => 0.3
color.hsba.alpha // => 0.4
Po prostu zainstaluj go za pomocą Carthage i gotowe.
Odpowiedzi:
Te linki zapewniają dalsze szczegóły:
źródło
colors
, możesz napisać coś w stylu:CGFloat red = colors[0];
error: <EXPR>:3:1: error: 'CGColorGetComponents' has been replaced by property 'CGColor.components'
W iOS 5 możesz użyć:
źródło
NSKeyedArchiver
, na przykład:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
SWIFT 3 i 4
Odkryłem, że składniki cgColor.com nie zawsze zwracały 4 wartości kolorów, więc zmieniłem to, aby pobierało je z opakowania CIColor
SWIFT 2
Nie jest to najbardziej efektywny sposób, więc nie korzystałbym z tego, gdy widok będzie ciągle rysowany od nowa.
źródło
Mam nadzieję, że to okaże się pomocne
źródło
Właśnie utworzyłem kategorię dla tego.
Idzie coś takiego:
Część
eppz!kit
z dodatkami UIColor .źródło
Dzięki. Musiałem dodać
const
na początku linii, ponieważ generował ostrzeżenie.źródło
źródło
Odpowiedź Davida Reesa w wersji Swift 3:
źródło
Możesz używać komponentów CIColor (Swift 5)
działa to również dla przestrzeni kolorów innych niż RGB
źródło
Od iOS 2.0 znajduje się prywatny sposób na przykład
UIColor
o nazwiestyleString
, która zwraca ciąg znaków reprezentujący RGB lub RGBA koloru, nawet dla takich jak whiteColor kolorów spoza przestrzeni RGB.Cel C:
W Swift można użyć nagłówka mostkującego, aby udostępnić interfejs. W przypadku czystego Swift będziesz musiał utworzyć
@objc
protokół metodą prywatną iunsafeBitCast
UIColor
protokołem:źródło
Najczęściej głosowana odpowiedź jest nieaktualna:
Zamiast tego użyj
myUIColor.cgColor.components
źródło
Chciałem uzyskać kolor tła
UITableViewStyle
„UITableViewStyleGrouped”, więc wviewDidAppear:
metodzie dodałem kod:NSLog(@"%@", self.tableView.backgroundView.backgroundColor);
Zrobił to, czego się spodziewałem i zwrócił dziennik:
UIDeviceRGBColorSpace 0.937255 0.937255 0.956863 1
Krótko mówiąc, po prostu wpisz
NSLog(@"%@", [UIColor whateverColor]);
źródło
Korzystanie z HandyUIKit sprawia, że jest to naprawdę łatwe :
Istnieje również podobna opcja pobierania
hsba
wartości :Po prostu zainstaluj go za pomocą Carthage i gotowe.
Mam nadzieję, że to pomoże!
źródło
Kilka przydatnych makr, które stworzyłem dla tego i innych kontrolek kolorów:
W twoim przypadku po prostu użyjesz
Makra:
źródło
ustaw swój UIColor w ten sposób
to jest dla Xamarin ios ... ale na pewno jest taka metoda w swift.
źródło