UIColors nasıl karşılaştırılır?


127

Bir UIImageView üzerinde arka plan için renk setini kontrol etmek istiyorum. Denedim:

if(myimage.backgroundColor == [UIColor greenColor]){
...}
else{
...}

ama bu işe yaramıyor, rengin yeşil olduğunu bildiğimde bile, her zaman başka kısma düşüyor.

Ayrıca, hata ayıklama konsolunda geçerli rengi çıkarmanın bir yolu var.

p [myimage backgroundColor]

ve

po [myimage backgroundColor]

çalışmıyor.

Yanıtlar:


176

Denedin [myColor isEqual:someOtherColor]mi


Teşekkürler. İsEqualTo ile fark nedir? Ayrıca, hata ayıklayıcıda nasıl görüntüleneceğini biliyor musunuz?
4thSpace

93
Bu arada: Renkleri bu şekilde karşılaştırırken dikkatli olun, çünkü eşit kabul edilmeleri için aynı renk modelinde olmaları gerekir. Örneğin, # ffffffeşit değildir [UIColor whiteColor].
zoul

2
İyi bir nokta Zoul, sadece soruna değil, bir çözüme işaret etmek daha yararlı olabilir ama = D
pfrank

11
İyi bir nokta Pfrank, sadece soruna değil, bir çözüme de işaret etmek için daha yararlı olabilir ama = D
Albert Renshaw,

Bir button.tintColor'ı ayarladığım renkle karşılaştırırken her zaman benim için işe yaramadı. Yuvarlama ile ilgisi vardı. Bununla karşılaşırsanız aşağıdaki cevabıma bakın.
Pbk

75

Zoul'un yorumlarda belirttiği gibi, farklı modellerde / alanlarda (örneğin ile ) olan renkleri karşılaştırırken isEqual:geri dönecektir . Karşılaştırmadan önce her iki rengi aynı renk uzayına dönüştüren bu UIColor uzantısını yazdım:NO#FFF[UIColor whiteColor]

- (BOOL)isEqualToColor:(UIColor *)otherColor {
    CGColorSpaceRef colorSpaceRGB = CGColorSpaceCreateDeviceRGB();

    UIColor *(^convertColorToRGBSpace)(UIColor*) = ^(UIColor *color) {
        if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) == kCGColorSpaceModelMonochrome) {
            const CGFloat *oldComponents = CGColorGetComponents(color.CGColor);
            CGFloat components[4] = {oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1]};
            CGColorRef colorRef = CGColorCreate( colorSpaceRGB, components );

            UIColor *color = [UIColor colorWithCGColor:colorRef];
            CGColorRelease(colorRef);
            return color;            
        } else
            return color;
    };

    UIColor *selfColor = convertColorToRGBSpace(self);
    otherColor = convertColorToRGBSpace(otherColor);
    CGColorSpaceRelease(colorSpaceRGB);

    return [selfColor isEqual:otherColor];
}

2
Güzel, ama sanırım bir sızıntı var. CGColorCreate'i ortada asla bırakmazsınız.
borrrden

Bu mükemmel bir çözüm!
alones

Karatlara ne olduğunu açıklayabilir misin? Bu sözdizimini daha önce gördüğümü sanmıyorum.
Victor Engel

@VictorEngel, UIColor *(^convertColorToRGBSpace)(UIColor*) = ^(UIColor *color) ...bir block. Daha sonra ile kullanır convertColorToRGBSpace(self). İOS'ta
JRG-Developer

1
Ben blokları kullanıyorum ama daha önce hiç böyle bir sözdizimi görmemiştim. Sanırım bir nesneyi döndüren bir blok kullanmadım. Bu, hakkında gönderi yayınladığım = sayfanın sol tarafındakidir.
Victor Engel

65

Bu biraz geç olabilir, ancak CoreGraphics bunu başarmak için daha kolay bir API'ye sahiptir:

CGColorEqualToColor(myColor.CGColor, [UIColor clearColor].CGColor)

Belgelerin dediği gibi:

İki rengin eşit olup olmadığını gösterir. Eşit renk boşluklarına ve sayısal olarak eşit renk bileşenlerine sahiplerse iki renk eşittir.

Bu, birçok sorunu ve sızıntı yapan / özel algoritmaları çözer.


5
[UIColor isEqual:]bununla aynı şeyi yapar, değil mi? Mark'ın cevabı, renk uzayına rağmen denkliği kontrol eden tek cevaptır.
mattsven

9
Bu UIColor isEqual:, renklerin farklı renk alanlarında olmasından daha fazla yardımcı olmaz .
Echelon

Soru, CGColor karşılaştırması değil, UIColor karşılaştırması ile ilgilidir.
Sean Vikoren

Diğer tüm çözümlerden daha doğru :) Benden +1
Nirav Gadhiya

8

samvermette'nin çözümü hızlıca çevrildi:

extension UIColor {
    func isEqualToColor(otherColor : UIColor) -> Bool {
        if self == otherColor {
            return true
        }

        let colorSpaceRGB = CGColorSpaceCreateDeviceRGB()
        let convertColorToRGBSpace : ((color : UIColor) -> UIColor?) = { (color) -> UIColor? in
            if CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) == CGColorSpaceModel.Monochrome {
                let oldComponents = CGColorGetComponents(color.CGColor)
                let components : [CGFloat] = [ oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1] ]
                let colorRef = CGColorCreate(colorSpaceRGB, components)
                let colorOut = UIColor(CGColor: colorRef!)
                return colorOut
            }
            else {
                return color;
            }
        }

        let selfColor = convertColorToRGBSpace(color: self)
        let otherColor = convertColorToRGBSpace(color: otherColor)

        if let selfColor = selfColor, otherColor = otherColor {
            return selfColor.isEqual(otherColor)
        }
        else {
            return false
        }
    }
}

7
#import "UIColor-Expanded.h"
//https://github.com/thetaplab/uicolor-utilities

//RGB distance
CGFloat distance = sqrtf(powf((clr0.red - clr1.red), 2) + powf((clr0.green - clr1.green), 2) + powf((clr0.blue - clr1.blue), 2) );
if(distance<=minDistance){
....
}else{
...
}

@Rudolf Adamkovic, bu Pisagor teoremi
Viktor Goltvyanitsa

6

Bu UIColor uzantısı, karşılaştırılan renklerin çoğu durumda olması gereken RGB formatına dönüştürülebilmesi koşuluyla iyi çalışır.

public extension UIColor {

    static func == (l: UIColor, r: UIColor) -> Bool {
        var l_red = CGFloat(0); var l_green = CGFloat(0); var l_blue = CGFloat(0); var l_alpha = CGFloat(0)
        guard l.getRed(&l_red, green: &l_green, blue: &l_blue, alpha: &l_alpha) else { return false }
        var r_red = CGFloat(0); var r_green = CGFloat(0); var r_blue = CGFloat(0); var r_alpha = CGFloat(0)
        guard r.getRed(&r_red, green: &r_green, blue: &r_blue, alpha: &r_alpha) else { return false }
        return l_red == r_red && l_green == r_green && l_blue == r_blue && l_alpha == r_alpha
    }
}

En azından bu uzantıyla:

UIColor.whiteColor == UIColor(hex: "#FFFFFF") // true
UIColor.black == UIColor(red: 0, green: 0, blue: 0, alpha: 1) // true

Yerel UColor.isEqual (...) kullanılarak karşılaştırıldığında her iki karşılaştırma da yanlış döndürür.


5

Bu kategoriyi ben yazdım. Eğer isEqual:HAYIR çıkmıyor farklı bileşenlerin daha da karşılaştırma hala eşleşebileceğini, eğer test edecek. Mümkünse, farklı modeller hala karşılaştırılmaktadır.

@implementation UIColor (Matching)


-(BOOL)matchesColor:(UIColor *)color error:(NSError *__autoreleasing *)error
{
    UIColor *lhs = self;
    UIColor *rhs = color;

    if([lhs isEqual:rhs]){ // color model and values are the same
        return YES;
    }

    CGFloat red1, red2, green1, alpha1, green2, blue1, blue2, alpha2;
    BOOL lhsSuccess = [lhs getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1];
    BOOL rhsSuccess = [rhs getRed:&red2 green:&green2 blue:&blue2 alpha:&alpha2];
    if((!lhsSuccess && rhsSuccess) || (lhsSuccess && !rhsSuccess)){ // one is RGBA, one color not.
        CGFloat r,g,b,a;
        if(!lhsSuccess){ // lhs color could be a monochrome
            const CGFloat *components = CGColorGetComponents(lhs.CGColor);
            if([lhs _colorSpaceModel] == kCGColorSpaceModelMonochrome){
                r = g = b = components[0];
                a = components[1];

                return r == red2 && g == green2 && b == blue2 && a == alpha2;
            }
        } else {  // rhs color could be a monochrome
            const CGFloat *components = CGColorGetComponents(rhs.CGColor);

            if([rhs _colorSpaceModel] == kCGColorSpaceModelMonochrome){
                r = g = b = components[0];
                a = components[1];
                return r == red1 && g == green1 && b == blue1 && a == alpha1;
            }
        }


        NSError *aError = [[NSError alloc] initWithDomain:@"UIColorComparision" code:-11111 userInfo:[self _colorComparisionErrorUserInfo]];
        *error = aError;
        return  NO;
    } else if (!lhsSuccess && !rhsSuccess){ // both not RGBA, lets try HSBA
        CGFloat hue1,saturation1,brightness1;
        CGFloat hue2,saturation2,brightness2;

        lhsSuccess = [lhs getHue:&hue1 saturation:&saturation1 brightness:&brightness1 alpha:&alpha1];
        rhsSuccess = [lhs getHue:&hue2 saturation:&saturation2 brightness:&brightness2 alpha:&alpha2];
        if((!lhsSuccess && rhsSuccess) || (lhsSuccess && !rhsSuccess)){
            NSError *aError = [[NSError alloc] initWithDomain:@"UIColorComparision" code:-11111 userInfo:[self _colorComparisionErrorUserInfo]];
            *error = aError;
            return  NO;
        } else if(!lhsSuccess && !rhsSuccess){ // both not HSBA, lets try monochrome
            CGFloat white1, white2;

            lhsSuccess = [lhs getWhite:&white1 alpha:&alpha1];
            rhsSuccess = [rhs getWhite:&white2 alpha:&alpha2];
            if((!lhsSuccess && rhsSuccess) || (lhsSuccess && !rhsSuccess)){
                NSError *aError = [[NSError alloc] initWithDomain:@"UIColorComparision" code:-11111 userInfo:[self _colorComparisionErrorUserInfo]];
                *error = aError;
                return  NO;
            } else {
                return white1 == white2 && alpha1 == alpha2;
            }

        } else {
            return hue1 == hue2 && saturation1 == saturation2 && brightness1 == brightness2 && alpha1 == alpha2;
        }

    } else {
        return (red1 == red2 && green1 == green2 && blue1 == blue2 && alpha1 == alpha2);

    }
}

-(NSDictionary *)_colorComparisionErrorUserInfo{

    NSDictionary *userInfo = @{
                               NSLocalizedDescriptionKey: NSLocalizedString(@"Comparision failed.", nil),
                               NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The colors models are incompatible. Or the color is a pattern.", nil),

                               };
    return userInfo;
}

- (CGColorSpaceModel)_colorSpaceModel {
    return CGColorSpaceGetModel(CGColorGetColorSpace(self.CGColor));
}

@end

UIColor *green1 = [UIColor greenColor];
UIColor *green2 = [UIColor colorWithRed:0 green:1 blue:0 alpha:1];
UIColor *yellow = [UIColor yellowColor];
UIColor *grey1  = [UIColor colorWithWhite:2.0/3.0 alpha:1];
UIColor *grey2  = [UIColor lightGrayColor];

NSError *error1, *error2, *error3, *error4, *error5;

BOOL match1 = [green1 matchesColor:green2 error:&error1];   // YES
BOOL match2 = [green1 matchesColor:yellow error:&error2];   // NO
BOOL match3 = [green1 matchesColor:grey1 error:&error3];    // NO
BOOL match4 = [grey1 matchesColor:grey2 error:&error4];     // YES
BOOL match5 = [grey1 matchesColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.png"]]
                            error:&error5];                 // NO, Error

2

Bu şekilde karşılaştırırken myimage.backgroundColor == [UIColor greenColor], bu ifadeden önce backgroundColor'u yeşile değiştirmediyseniz, çalışmıyor.

Renk oyunumda da aynı problemi yaşadım ve RGB renklerinde basit fark denklemini kullanarak ColorProcess'e buradan hızlıca göz atabileceğinizi çözdüm.

galipler cevap gibi

GFloat distance = sqrtf(powf((clr0.red - clr1.red), 2) + powf((clr0.green - clr1.green), 2) + powf((clr0.blue - clr1.blue), 2) );
if(distance<=minDistance){
....
}else{

}

Bu kod örneği yerine kullanabilirsiniz

include "UIColorProcess.h"

..

float distance = [UIColorProcess findDistanceBetweenTwoColor:[UIColor redColor] secondColor:[UIColor blueColor]];

ve tabii ki 0 döndürürse, bu çok benzer renkleri karşılaştırdığınız anlamına gelir. dönüş aralığı (0.0f - 1.5f) gibi bir şeydir ..


color.red/blue/green, tüm farklı renk sınıfları için desteklenmez, belgeleri kontrol edin
pfrank

1

Bazı garip yuvarlama hataları meydana gelebilir. Bir nesnenin bir renge ayarlanmasının ve onu ayarladığınız rengin tam olarak eşleşmemesinin nedeni bu olabilir.

Ben böyle çözdüm:

private func compareColors (c1:UIColor, c2:UIColor) -> Bool{
    // some kind of weird rounding made the colors unequal so had to compare like this

    var red:CGFloat = 0
    var green:CGFloat  = 0
    var blue:CGFloat = 0
    var alpha:CGFloat  = 0
    c1.getRed(&red, green: &green, blue: &blue, alpha: &alpha)

    var red2:CGFloat = 0
    var green2:CGFloat  = 0
    var blue2:CGFloat = 0
    var alpha2:CGFloat  = 0
    c2.getRed(&red2, green: &green2, blue: &blue2, alpha: &alpha2)

    return (Int(green*255) == Int(green2*255))

}

Bu kod yalnızca 1'i karşılaştırarak değil, tüm bileşenleri karşılaştırarak geliştirilebilir. Örneğin kırmızı + yeşil + mavi + alfa == kırmızı2 + yeşil2 + mavi2 + alfa2


1
Renkler yalnızca yeşil bileşenle karşılaştırıldığında aynı değildir
Ben Sinclair

Bu, farklı yollarla ayarlanan renkleri karşılaştırırken ortaya çıkabilecek olası yuvarlama hatalarından bahseden ve bunları ele almaya çalışan tek cevaptır; bu nedenle, yalnızca yeşile odaklanırken, örnek (cevabın yazarının bahsettiği gibi) genelleştirilebilir. Bu nedenle ve yuvarlama aslında karşılaştığım sorun olduğundan, bu cevabı yararlı buldum.
Matt Wagner

1

Her durumda benim için çalışan bu uzantıyı kullanıyorum.

/***** UIColor Extension to Compare colors as string *****/
@interface UIColor (compare)
- (BOOL)compareWithColor:(UIColor *)color;
@end

@implementation UIColor(compare)
- (BOOL)compareWithColor:(UIColor *)color {
    return ([[[CIColor colorWithCGColor:self.CGColor] stringRepresentation] isEqualToString:[[CIColor colorWithCGColor:color.CGColor] stringRepresentation]]);
}
@end
/**** End ****/

Umut birisine yardım eder.

Not: bu uzantıya #ffffffeşittir[UIColor whiteColor]


Bu, renkleri renk uzayları arasında karşılaştırırken işe yarar mı?
Vaddadi Kartick

Emin değilim, tüm renk alanları için test etmedim.
arunit21

0

Ne dersin:

+(BOOL)color:(UIColor *)color1 matchesColor:(UIColor *)color2
{
    CGFloat red1, red2, green1, green2, blue1, blue2, alpha1, alpha2;
    [color1 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1];
    [color2 getRed:&red2 green:&green2 blue:&blue2 alpha:&alpha2];

    return (red1 == red2 && green1 == green2 && blue1 == blue2 && alpha1 == alpha2);
}

bu bir desen rengi olarak uç durumlarda çalışmayabilir. doc'tan Renk uyumlu bir renk uzayındaysa, renk RGB formatına dönüştürülür ve bileşenleri uygulamanıza döndürülür. Renk uyumlu bir renk uzayında değilse, parametreler değişmez. Böylece, her bir kayan noktayı somutlaştırabilirsiniz -1ve arama sonrasında hala bu değere sahipse getRed:green:blue:alpha:, karşılaştırmanın başarısız olduğunu bilirsiniz. (ya da size başarılı bir şekilde çağrılıp çağrılmadığını söyleyeceği için döndürülen boole
değerini atlamayın

1
Az önce kontrol ettim: Teorik olarak tek renkliyi RGBA renklerine karşı kontrol etmek mümkün olsa da, getRed:free:blue:alpha:tek renkli bir renkte başarılı olamayacağından kodunuzla çalışmayacaktır . Yani kodunuz bundan başka bir sonuç vermeyecek is equal:. lütfen bununla nasıl başa çıkılacağına dair cevabıma bakın.
vikingosegundo

Titizlik için +1! Yukarıdaki kod basit durumum için çalışıyor, ancak görünüşe göre sihirli değnek değil. İyi şeyler.
dooleyo

0

Swift'de RGC Space Color'a geçmek için bir uzantı:

extension UIColor {

func convertColorToRGBSpaceColor() -> UIColor {
    let colorSpaceRGB = CGColorSpaceCreateDeviceRGB()
    let oldComponents = CGColorGetComponents(self.CGColor)
    let components = [oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1]]
    let colorRef = CGColorCreate(colorSpaceRGB, components)
    let convertedColor = UIColor(CGColor: colorRef!)
    return convertedColor
}

}


0

Swift 2.2 özelliklerini kullanarak UIColor'a genişletme. Bununla birlikte, RGBA değerleri karşılaştırıldığından ve bunlar CGFloat olduğundan, yuvarlama hatalarının, tam olarak aynı olmadıklarında renklerin eşit olarak döndürülmemesine neden olabileceğini unutmayın (örneğin, başlangıçta başlangıçta tam olarak aynı özellikler kullanılarak oluşturulmamışlardır) (...)!).

/**
 Extracts the RGBA values of the colors and check if the are the same.
 */

public func isEqualToColorRGBA(color : UIColor) -> Bool {
    //local type used for holding converted color values
    typealias colorType = (red : CGFloat, green : CGFloat, blue : CGFloat, alpha : CGFloat)
    var myColor         : colorType = (0,0,0,0)
    var otherColor      : colorType = (0,0,0,0)
    //getRed returns true if color could be converted so if one of them failed we assume that colors are not equal
    guard getRed(&myColor.red, green: &myColor.green, blue: &myColor.blue, alpha: &myColor.alpha) &&
        color.getRed(&otherColor.red, green: &otherColor.green, blue: &otherColor.blue, alpha: &otherColor.alpha)
        else {
            return false
    }
    log.debug("\(myColor) = \(otherColor)")
    //as of Swift 2.2 (Xcode 7.3.1), tuples up to arity 6 can be compared with == so this works nicely
    return myColor == otherColor
}

0

UIColor uzantısı

- (CGFloat)accuracyCompareWith:(UIColor *)color {
    CIColor *c1 = [[CIColor alloc] initWithColor:self];
    CIColor *c2 = [[CIColor alloc] initWithColor:color];

    BOOL hasAlpha = c1.numberOfComponents == 4 && c2.numberOfComponents == 4;
    NSInteger numberOfComponents = hasAlpha ? 4 : 3;

    CGFloat colorMax = 1.0;
    CGFloat p = colorMax / 100.0;

    CGFloat redP = fabs(c1.red / p - c2.red / p);
    CGFloat greenP = fabs(c1.green / p - c2.green / p);
    CGFloat blueP = fabs(c1.blue / p - c2.blue / p);
    CGFloat alphaP = 0;

    if (hasAlpha)
        alphaP = fabs(c1.alpha / p - c2.alpha / p);

    return (redP + greenP + blueP + alphaP) / (CGFloat)numberOfComponents;
}

0

Ben dönüştürülen var RAF ın cevabı için Swift 4 (değişikliklerin bir sürü CGColor, kaldırılan kuvvet unwrapping API) ve cömert kullanımı girinti sayesinde azaldı guard:

@extension UIColor {
    func isEqualToColor(otherColor: UIColor) -> Bool {
        if self == otherColor {
            return true
        }
        let colorSpaceRGB = CGColorSpaceCreateDeviceRGB()
        let convertColorToRGBSpace: ((UIColor) -> UIColor?) = { (color) -> UIColor? in
            guard color.cgColor.colorSpace?.model == .monochrome else {
                return color
            }
            guard let oldComponents = color.cgColor.components else {
                return nil
            }
            let newComponents = [oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1]]
            guard let colorRef = CGColor(colorSpace: colorSpaceRGB, components: newComponents) else {
                    return nil
            }
            return UIColor(cgColor: colorRef)
        } 

        guard let selfColor = convertColorToRGBSpace(self), 
              let otherColor = convertColorToRGBSpace(otherColor) else {
            return false
        }
        return selfColor.isEqual(otherColor)
    }
}

0

Uzantıyı neden eşitlenebilir protokol ile eklemiyorsunuz? Bu cevap Nicolas Miari'nin çözümünü kullanıyor. Yani, bu cevabı beğendiyseniz, lütfen cevabını beğenebilirsiniz (üstten ikinci)

Zoul'un yorumu: Renkleri bu şekilde karşılaştırırken dikkatli olun, çünkü eşit kabul edilmeleri için aynı renk modelinde olmaları gerekir. Örneğin, #ffffff [UIColor whiteColor] 'a eşit değildir

static func == (lhs: UIColor, rhs: UIColor) -> Bool {

    let colorSpaceRGB = CGColorSpaceCreateDeviceRGB()
    let convertColorToRGBSpace: ((UIColor) -> UIColor?) = { (color) -> UIColor? in
        guard color.cgColor.colorSpace?.model == .monochrome else {
            return color
        }
        guard let oldComponents = color.cgColor.components else {
            return nil
        }
        let newComponents = [oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1]]
        guard let colorRef = CGColor(colorSpace: colorSpaceRGB, components: newComponents) else {
            return nil
        }
        return UIColor(cgColor: colorRef)
    }

    guard let selfColor = convertColorToRGBSpace(lhs),
        let otherColor = convertColorToRGBSpace(rhs) else {
            return false
    }
    return selfColor.isEqual(otherColor)
}

0

@ Samvermette cevabı çok iyi olsa da, ben (benim durumumda farklı renk tiplerini karşılaştırırken bazen yanlış negatifler yol olabileceğini saptadık UIDeviceRGBColoriçin UICachedDeviceWhiteColor). Ben de rengi açıkça başka bir yerde oluşturarak düzelttim:

- (BOOL)isEqualToColor:(UIColor *)otherColor
{
    if (self == otherColor)
        return YES;

    CGColorSpaceRef colorSpaceRGB = CGColorSpaceCreateDeviceRGB();

    UIColor *(^convertColorToRGBSpace)(UIColor*) = ^(UIColor *color)
    {
        if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) == kCGColorSpaceModelMonochrome)
        {
            const CGFloat *oldComponents = CGColorGetComponents(color.CGColor);
            CGFloat components[4] = {oldComponents[0], oldComponents[0], oldComponents[0], oldComponents[1]};
            CGColorRef colorRef = CGColorCreate(colorSpaceRGB, components);
            UIColor *color = [UIColor colorWithCGColor:colorRef];
            CGColorRelease(colorRef);
            return color;
        }
        else
        {
            const CGFloat *oldComponents = CGColorGetComponents(color.CGColor);
            CGFloat components[4] = {oldComponents[0], oldComponents[1], oldComponents[2], oldComponents[3]};
            CGColorRef colorRef = CGColorCreate(colorSpaceRGB, components);
            UIColor *color = [UIColor colorWithCGColor:colorRef];
            CGColorRelease(colorRef);
            return color;
        }
    };

    UIColor *selfColor = convertColorToRGBSpace(self);
    otherColor = convertColorToRGBSpace(otherColor);
    CGColorSpaceRelease(colorSpaceRGB);

    return [selfColor isEqual:otherColor];
}

0

Kullanmak zorundasın

BOOL equalColors = CGColorEqualToColor(uiColor1.CGColor, uiColor2.CGColor));

Belgeler burada .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.