Я хотел бы проверить набор цветов для фона в UIImageView. Я пробовал:
if(myimage.backgroundColor == [UIColor greenColor]){
...}
else{
...}
но это не работает, даже когда я знаю, что цвет зеленый, он всегда попадает в другую часть.
Кроме того, есть способ вывести текущий цвет в консоль отладки.
p [myimage backgroundColor]
и
po [myimage backgroundColor]
не работают.
ios
objective-c
cocoa-touch
uiimageview
uicolor
4thSpace
источник
источник
ffffff
не равно[UIColor whiteColor]
.Как указал zoul в комментариях,
isEqual:
будет возвращатьсяNO
при сравнении цветов, которые находятся в разных моделях / пространствах (например,#FFF
с[UIColor whiteColor]
). Я написал это расширение UIColor, которое преобразует оба цвета в одно и то же цветовое пространство перед их сравнением:источник
UIColor *(^convertColorToRGBSpace)(UIColor*) = ^(UIColor *color) ...
объявляетblock
. Он использует его позже сconvertColorToRGBSpace(self)
. Для ознакомленияЭто может быть слишком поздно, но у CoreGraphics есть более простой API для этого:
Как говорится в документации:
Это решает множество проблем и утечек / нестандартных алгоритмов.
источник
[UIColor isEqual:]
делает то же самое, не так ли? Ответ Марка по-прежнему единственный, который хорошо проверяет эквивалентность, несмотря на цветовое пространство.UIColor isEqual:
если бы цвета находились в разных цветовых пространствах.Решение samvermette переведено на быстрое:
источник
источник
Это расширение UIColor отлично работает при условии, что сравниваемые цвета можно преобразовать в формат RGB, что и должно быть в большинстве случаев.
По крайней мере, с этим расширением:
Оба сравнения вернут false, если сравнивать с использованием собственного UColor.isEqual (...)
источник
Я написал эту категорию. Если
isEqual:
действительно вернет NO, он проверит, может ли дальнейшее сравнение различных компонентов соответствовать. По возможности все же сравниваются разные модели.источник
У меня была такая же проблема в моей цветной игре, и я решил, что, используя простое уравнение разности в цветах RGB, вы можете быстро взглянуть на этот короткий образец кода ColorProcess отсюда
это как ответ победителей
Вместо этого образца кода вы можете использовать
и, конечно, если он возвращает 0, это означает, что вы сравниваете слишком похожий цвет. диапазон возврата примерно такой (0,0f - 1,5f) ..
источник
Могут возникнуть странные ошибки округления. Это может быть причиной того, что объект, установленный на цвет, и цвет, который вы его установили, не совпадают в точности.
Вот как я это решил:
Этот код можно улучшить, сравнивая не только 1, но и все компоненты. Например, красный + зеленый + синий + альфа == красный2 + зеленый2 + синий2 + альфа2
источник
Я использую это расширение, которое у меня работает во всех случаях.
Надежда кому-то помогает.
Примечание:
#ffffff
равно[UIColor whiteColor]
по этому расширениюисточник
Что о:
источник
-1
и если какое-либо из них все еще имеет это значение после вызоваgetRed:green:blue:alpha:
, вы знаете, что сравнение не удалось. (или не пропускайте возвращенное логическое значение, поскольку оно сообщит вам, был ли он вызван успешно.)getRed:free:blue:alpha:
с монохромным цветом. Таким образом, ваш код не даст другого результата, кромеis equal:
. пожалуйста, посмотрите мой ответ, как с этим бороться.Вот расширение для переключения на RGC Space Color в Swift:
}
источник
Расширение до UIColor с использованием функций Swift 2.2. Однако обратите внимание, что, поскольку значения RGBA сравниваются, а это CGFloat, ошибки округления могут привести к тому, что цвета не будут возвращены как равные, если они не совсем одинаковы (например, они не были изначально созданы с использованием точно таких же свойств в init (...)!).
источник
Расширение UIColor
источник
Я преобразовал ответ raf на Swift 4 (много изменений в
CGColor
API), убрал принудительное разворачивание и уменьшил отступы благодаря щедрому использованиюguard
:источник
Почему бы не добавить расширение с равноправным протоколом? В этом ответе используется решение Николаса Миари. Итак, если вам нравится этот ответ, пожалуйста, оцените его ответ (второй сверху)
Комментарий Зоула: Будьте осторожны при сравнении цветов таким образом, потому что они должны быть в одной цветовой модели, чтобы считаться равными. Например, #ffffff не равно [UIColor whiteColor].
источник
В то время как @ samvermette отвечают очень хорошо, я обнаружил , что иногда это может привести к ложным негативов при сравнении различных типов цвета (в моем случае
UIDeviceRGBColor
кUICachedDeviceWhiteColor
). Я исправил это, явно создав цвет в `else ':источник
Вы должны использовать
Документация здесь .
источник
источник