3 回答

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

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

TA貢獻1839條經驗 獲得超15個贊
這可能為時已晚,但是CoreGraphics有一個更簡單的API可以實現此目的:
CGColorEqualToColor(myColor.CGColor, [UIColor clearColor].CGColor)
就像文檔中說的那樣:
指示兩種顏色是否相等。如果兩種顏色具有相等的色彩空間和數字上相等的顏色分量,則它們是相等的。
這解決了很多麻煩和泄漏/自定義算法。
- 3 回答
- 0 關注
- 514 瀏覽
添加回答
舉報