Bagaimana cara membandingkan UIColors?


127

Saya ingin memeriksa pengaturan warna untuk latar belakang pada UIImageView. Saya sudah mencoba:

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

tapi itu tidak berhasil, bahkan ketika saya tahu warnanya hijau, selalu jatuh ke bagian lain.

Juga, apakah ada cara untuk menampilkan warna saat ini di konsol debug.

p [myimage backgroundColor]

dan

po [myimage backgroundColor]

tidak bekerja

Jawaban:


176

Sudahkah Anda mencoba [myColor isEqual:someOtherColor]?


Terima kasih. Apa bedanya dengan isEqualTo? Juga, apakah Anda tahu cara menampilkannya di debugger?
4thSpace

93
Ngomong-ngomong: Berhati-hatilah saat membandingkan warna dengan cara ini, karena mereka harus berada dalam model warna yang sama agar dianggap setara. Misalnya, # fffffftidak sama [UIColor whiteColor].
zoul

2
Good point Zoul, mungkin lebih bermanfaat untuk menunjuk ke solusi bukan hanya masalah, meskipun = D
pfrank

11
Poin bagus Pfrank, mungkin lebih bermanfaat untuk menunjuk ke solusi bukan hanya masalah, meskipun = D
Albert Renshaw

Tidak selalu berhasil untuk saya ketika membandingkan tombol. Warna dengan warna yang saya atur. Harus dilakukan dengan pembulatan. Jika Anda mengalami ini lihat jawaban saya di bawah ini.
Pbk

75

Seperti yang ditunjukkan zoul di komentar, isEqual:akan kembali NOketika membandingkan warna yang ada dalam model / spasi yang berbeda (misalnya #FFFdengan [UIColor whiteColor]). Saya menulis ekstensi UIColor ini yang mengubah kedua warna ke ruang warna yang sama sebelum membandingkannya:

- (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
Bagus, tapi saya rasa ada kebocoran. Anda tidak pernah melepaskan CGColorCreate di tengah.
borrrden

Ini solusi sempurna!
Sendiri

Bisakah Anda jelaskan apa yang terjadi dengan karat? Saya tidak berpikir saya pernah melihat sintaks itu sebelumnya.
Victor Engel

@VictorEngel, UIColor *(^convertColorToRGBSpace)(UIColor*) = ^(UIColor *color) ...mendeklarasikan a block. Dia menggunakannya nanti dengan convertColorToRGBSpace(self). Untuk pengantar blok di iOS, lihat raywenderlich.com/9328/creating-a-diner-app-using-blocks-part-1
JRG-Developer

1
Saya menggunakan semua blok tine, tetapi saya belum pernah melihat sintaks seperti ini sebelumnya. Saya kira mungkin saya tidak menggunakan blok yang mengembalikan objek. Ini adalah apa yang ada di sisi kiri = yang saya posting.
Victor Engel

65

Ini mungkin agak terlambat, tetapi CoreGraphics memiliki API yang lebih mudah untuk mencapai ini:

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

Seperti dokumentasi mengatakan:

Menunjukkan apakah dua warna sama. Dua warna sama jika mereka memiliki ruang warna yang sama dan komponen warna yang sama secara numerik.

Ini memecahkan banyak masalah dan kebocoran / algoritma kustom.


5
[UIColor isEqual:]apakah hal yang sama seperti ini, bukan? Jawaban Mark masih satu-satunya yang memeriksa kesetaraan meskipun ruang warna dengan baik.
mattsven

9
Ini tidak membantu lagi UIColor isEqual:jika warna berada dalam ruang warna yang berbeda.
Eselon

Pertanyaannya adalah tentang perbandingan UIColor, bukan perbandingan CGColor.
Sean Vikoren

Lebih akurat daripada semua solusi lain :) +1 dari saya
Nirav Gadhiya

8

solusi samvermette diterjemahkan ke swift:

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, itu adalah teorema Pythagoras
Viktor Goltvyanitsa

6

Ekstensi UIColor ini berfungsi dengan baik asalkan warna yang dibandingkan dapat dikonversi ke format RGB, yang seharusnya merupakan sebagian besar kasus.

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
    }
}

Setidaknya dengan ekstensi ini:

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

Kedua perbandingan akan menghasilkan false jika dibandingkan dengan menggunakan UColor asli. IsEqual (...)


5

Saya menulis kategori ini. Jika isEqual:tidak mengembalikan NO, itu akan menguji apakah perbandingan lebih lanjut dari komponen yang berbeda mungkin masih cocok. Jika memungkinkan, model yang berbeda masih dibandingkan.

@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

Ketika Anda membandingkan myimage.backgroundColor == [UIColor greenColor]seperti ini jika Anda tidak mengubah backgroundColor menjadi hijau sebelum pernyataan itu tidak berfungsi.

Saya memiliki masalah yang sama dalam permainan warna saya dan saya menyelesaikannya dengan menggunakan persamaan perbedaan sederhana dalam warna RGB, Anda dapat dengan cepat melihat contoh kode pendek ColorProcess dari sini

jawabannya seperti pemenang

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{
…
}

Alih-alih contoh kode yang dapat Anda gunakan

include "UIColorProcess.h"

..

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

dan tentu saja jika mengembalikan 0 yang berarti Anda membandingkan warna yang terlalu mirip. rentang kembali adalah sesuatu seperti (0,0f - 1,5f) ..


color.red/blue/green tidak didukung untuk semua jenis kelas warna yang berbeda, periksa dokumen
pfrank

1

Beberapa kesalahan pembulatan yang aneh dapat terjadi. Itu bisa menjadi alasan objek diatur ke warna dan warna yang Anda atur tidak sesuai persis.

Inilah cara saya menyelesaikannya:

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))

}

Kode ini dapat ditingkatkan dengan tidak hanya membandingkan 1 tetapi membandingkan semua komponen. Misal merah + hijau + biru + alpha == red2 + green2 + blue2 + alpha2


1
Warna tidak sama jika dibandingkan dengan komponen hijau saja
Ben Sinclair

Ini adalah satu-satunya jawaban yang menyebutkan dan mencoba untuk mengatasi kesalahan pembulatan potensial yang dapat muncul sambil membandingkan warna yang ditetapkan melalui cara yang berbeda; jadi, sementara itu hanya berfokus pada hijau, contohnya (seperti yang penulis sebutkan jawabannya) dapat digeneralisasi. Karena itu, dan karena pembulatan sebenarnya adalah masalah yang saya hadapi, saya menemukan jawaban ini bermanfaat.
Matt Wagner

1

Saya menggunakan ekstensi ini yang berfungsi untuk saya dalam semua kasus.

/***** 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 ****/

Harapan membantu seseorang.

Catatan: #ffffffapakah sama [UIColor whiteColor]dengan ekstensi ini


Apakah ini berfungsi saat membandingkan warna di seluruh ruang warna?
Vaddadi Kartick

Tidak yakin, saya belum mengujinya untuk semua ruang warna.
arunit21

0

Bagaimana dengan:

+(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);
}

ini mungkin tidak berfungsi untuk kasus tepi sebagai warna pola. from doc Jika warnanya dalam ruang warna yang kompatibel, warnanya dikonversi ke format RGB dan komponennya dikembalikan ke aplikasi Anda. Jika warnanya tidak berada dalam ruang warna yang kompatibel, parameternya tidak berubah. Jadi, Anda dapat membuat instantiate setiap float dengan -1dan jika ada yang masih memiliki nilai ini setelah menelepon getRed:green:blue:alpha:, Anda tahu perbandingannya gagal. (atau jangan hilangkan boolean yang dikembalikan karena akan memberi tahu Anda jika berhasil dipanggil.)
vikingosegundo

1
Saya baru saja memeriksa: walaupun secara teori dimungkinkan untuk memeriksa warna monokrom terhadap warna RGBA, itu tidak akan berfungsi dengan kode Anda, karena getRed:free:blue:alpha:tidak akan berhasil pada warna monokrom. Jadi kode Anda tidak akan menghasilkan hasil selain dari is equal:. tolong lihat jawaban saya bagaimana menghadapinya.
vikingosegundo

+1 untuk ketelitian! Kode di atas berfungsi untuk kasus sederhana saya, tetapi akan muncul itu bukan peluru perak. Barang bagus.
dooleyo

0

Berikut ini adalah ekstensi untuk beralih ke Warna Ruang RGC di Swift:

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

Ekstensi ke UIColor, menggunakan fitur Swift 2.2. Namun perlu dicatat bahwa karena nilai-nilai RGBA dibandingkan, dan ini adalah CGFloat, kesalahan pembulatan dapat membuat warna-warna tersebut tidak dikembalikan sama dengan jika warna-warna tersebut tidak persis sama (mis. Warna-warna tersebut awalnya tidak dibuat menggunakan properti yang persis sama di init. (...)!).

/**
 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

Ekstensi UIColor

- (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

Saya telah mengonversi jawaban raf ke Swift 4 (banyak perubahan di CGColorAPI), menghapus pembongkaran paksa dan mengurangi indentasi berkat penggunaan yang murah hati dari 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

Mengapa tidak menambahkan ekstensi dengan protokol yang setara? Jawaban ini menggunakan solusi dari Nicolas Miari. Jadi, jika Anda menyukai jawaban ini, silakan menyukai jawabannya (kedua dari atas)

Komentar Zoul: Hati-hati ketika membandingkan warna dengan cara ini, karena mereka harus berada dalam model warna yang sama agar dianggap setara. Misalnya, #ffffff tidak sama dengan [UIColor whiteColor]

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

Sementara jawaban @ samvermette sangat baik, saya menemukan bahwa kadang-kadang dapat menyebabkan negatif palsu ketika membandingkan berbagai jenis warna (dalam kasus saya UIDeviceRGBColorke UICachedDeviceWhiteColor). Saya memperbaikinya dengan secara eksplisit membuat warna di `else 'juga:

- (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

Anda harus menggunakan

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

Dokumentasi di sini .


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.