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

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

如何比較UIColors?

如何比較UIColors?

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

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

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-12-14
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

當比較不同模型/空間中的顏色(例如與)時,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-12-14
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

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


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

就像文檔中說的那樣:


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


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



查看完整回答
反對 回復 2019-12-14
  • 3 回答
  • 0 關注
  • 514 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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