如何检查UIView的backgroundColor是否为clearColor?

时间:2015-07-22 14:09:51

标签: ios objective-c uiview uicolor

这不起作用:

if([myView.backgroundColor isEqual:[UIColor clearColor]])
   NSLog("Background is clear");
else
   NSLog("Background is not clear");

P.S:要重现案例,请在界面构建器中拖动uiview,将其设置为背景颜色以从界面构建器中清除颜色。设置视图的出口,然后使用上面的代码在viewDidLoad中进行比较。

以下是测试项目的链接:https://drive.google.com/file/d/0B_1hGRxJtrLjMzUyRHZyeV9SYzQ/view?usp=sharing

以下是Interface Builder的快照: enter image description here

3 个答案:

答案 0 :(得分:3)

也许两种颜色都很清晰,但仍然不一样?这个alpha值是不一样的......

UIColor.clearColor() == UIColor(white: 1.0, alpha: 0.0) // false
UIColor.clearColor() == UIColor(white: 0.0, alpha: 0.0) // true

尝试

if([myView.backgroundColor isEqual:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]])
   NSLog("Background is clear");
else
   NSLog("Background is not clear");

更好的方法是检查alpha是否为0.0:

CGFloat alpha = CGColorGetAlpha(myView.backgroundColor.CGColor);
if( alpha == 0.0 )
   NSLog("Background is clear");
else
   NSLog("Background is not clear");

答案 1 :(得分:3)

你的代码是正确的

UIView *aView = [[UIView alloc] init];
aView.backgroundColor = [UIColor clearColor];

if([aView.backgroundColor isEqual:[UIColor clearColor]]) {
     NSLog(@"Background is clear");
} else {
     NSLog(@"Background is not clear");
}

结果:

  

2015-07-22 15:22:57.430 APP [1568:24173]背景很清楚

更新:“界面构建器”

中的默认颜色大小写

来自:UIView Class Reference

  

@property(nonatomic, copy) UIColor *backgroundColor

     

讨论

     

可以设置对此属性的更改。 默认值为nil,   这会产生透明的背景色。

如果将颜色设置为接口构建器backgroundColor的默认属性,则属性为零,因此与[UIColor clearColor]的比较将为false。

你可以在这种情况下更新你的句柄代码:

if([self.aView.backgroundColor isEqual:[UIColor clearColor]] ||  self.aView.backgroundColor == nil) {
    NSLog(@"Background is clear");
} else {
    NSLog(@"Background is not clear");
}

Default color

更新:界面构建器中颜色鲜艳的情况

clear color

您可以测试Alpha值:

CGFloat bgColorAlpha = CGColorGetAlpha(self.aView.backgroundColor.CGColor);

if (bgColorAlpha == 0.0){
    NSLog(@"clear ");
}else{
   NSLog(@"not clear ");
}
  

2015-07-22 16:56:23.290 APP [1922:38283]明确

更多信息:

How to compare UIColors

Comparing colors in Objective-C

UIColor comparison

答案 2 :(得分:0)

您的代码是正确的,您只是假设不正确。运行这些行以查看您出错的地方:

NSLog("view color: %@", myView.backgroundColor);
NSLog("expected color: %@", [UIColor clearColor]);