亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何比較UIColors?

如何比較UIColors?

iOS
蝴蝶不菲 2019-10-29 13:08:54
我想檢查UIImageView上背景的顏色設置。我試過了:if(myimage.backgroundColor == [UIColor greenColor]){...}else{...}但這是行不通的,即使我知道顏色是綠色,它也總是落在其他部分。另外,還有一種方法可以在調試控制臺中輸出當前顏色。p [myimage backgroundColor]和po [myimage backgroundColor]不工作
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

samvermette的解決方案翻譯為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

        }

    }

}


查看完整回答
反對 回復 2019-10-29
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

正如zoul在評論中指出的那樣,當比較不同模型/空間中的顏色(例如與)時,isEqual:將返回。我編寫了這個UIColor擴展,可以在比較它們之前將兩種顏色轉換為相同的顏色空間: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];

}


查看完整回答
反對 回復 2019-10-29
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

這可能為時已晚,但是CoreGraphics有一個更簡單的API可以實現此目的:


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

就像文檔中說的那樣:


指示兩種顏色是否相等。如果兩種顏色具有相等的色彩空間和數字上相等的顏色分量,則它們是相等的。


這解決了很多麻煩和泄漏/自定義算法。


查看完整回答
反對 回復 2019-10-29
  • 3 回答
  • 0 關注
  • 649 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號