Ios 如何检查UIView';s的背景色是透明色吗?

Ios 如何检查UIView';s的背景色是透明色吗?,ios,objective-c,uiview,uicolor,Ios,Objective C,Uiview,Uicolor,这不起作用: if([myView.backgroundColor isEqual:[UIColor clearColor]]) NSLog("Background is clear"); else NSLog("Background is not clear"); 注意:若要复制该案例,请在interface builder中拖动uiview,将其背景色设置为interface builder中的“清除颜色”。设置视图的出口,然后使用上面的代码在viewDidLoad中进行比较

这不起作用:

if([myView.backgroundColor isEqual:[UIColor clearColor]])
   NSLog("Background is clear");
else
   NSLog("Background is not clear");
注意:若要复制该案例,请在interface builder中拖动uiview,将其背景色设置为interface builder中的“清除颜色”。设置视图的出口,然后使用上面的代码在viewDidLoad中进行比较

以下是测试项目的链接:

以下是Interface Builder的快照:

您的代码是正确的,只是您的假设不正确。运行这些行,看看哪里出了问题:

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

也许两种颜色都很清楚,但还是不一样?阿尔法值相同是不够的

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

更好的可能是只检查alpha是否为0.0:

CGFloat alpha = CGColorGetAlpha(myView.backgroundColor.CGColor);
if( alpha == 0.0 )
   NSLog("Background is clear");
else
   NSLog("Background is not clear");
你的代码是正确的

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应用程序[1568:24173]背景清晰

更新:界面生成器默认颜色的情况

发件人:

@property(非原子,复制)UIColor*backgroundColor

讨论

对该属性的更改可以设置动画默认值为零, 这将产生透明的背景色。

如果从interface builder将颜色设置为默认值,则
backgroundColor
属性将为零,因此与
[UIColor clearColor]
的比较将为假

您可以更新代码来处理此情况:

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

更新:界面生成器的清晰颜色案例

您可以测试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应用程序[1922:38283]清除

更多信息:


没有理由不这样做。是什么让你认为它不起作用?@villy393:NSLog结果“背景不清晰”让我认为它不起作用,因为我已经从界面生成器中将视图的背景颜色设置为“清晰颜色”。我认为可能还有其他原因。如果比较
[[UIColor clearColor]isEqual:[UIColor clearColor]]
,它将返回true。它显然将返回true。确定要重现该案例,请在interface builder中拖动uiview,将其背景色设置为“interface builder中的清除颜色”。设置视图的出口,然后在viewDidLoad中进行比较。@ChanchalRaj检查我的更新答案,它应该可以解决问题。输出是:视图颜色:UIDeviceGBColorSpace 0 0 0 0 0预期颜色:UIDeviceWhiteColorSpace 0 0 0 0我所做的是拖动一个UIView(默认为白色),将其背景颜色设置为从界面生成器中清除。将一个出口放到uiview,然后在viewDidLoad中编写上述代码。朋友,你认为哪里不对?界面生成器似乎创建了一个alpha为0的黑色RGB图像,而clearColor是一个alpha为0的黑色灰度图像。看起来一样,但比较起来不一样。if([self.myView.backgroundColor isEqual:[UIColor colorWithRed:0.0绿色:0.0蓝色:0.0 alpha:0.0]]我没有在代码中初始化视图,而是在interface builder中初始化视图。若要复制此案例,请在interface builder中拖动uiview,将其背景色设置为interface builder中的“透明色”。设置视图的出口,然后在viewDidLoad中对其进行比较。@ChanchalRaj检查我的更新我已使用从iBNOP创建的
uiview
测试了代码,pal,它也不起作用。如果我们从interface builder中选择clearColor,backgroundColor属性不会变为零。下面是语句的NSLog:NSLog(“查看颜色:%@”,myView.backgroundColor);查看颜色:UIDeviceGBColorSpace 0 0 0 0 0,如果我记录此语句:NSLog(“预期颜色:%@,[UIColor clearColor]”);它打印:预期颜色:UIDeviceWhiteColorSpace 0 0这可能是一个问题,因为您的代码说,即使alpha为0.9999(实际上是不透明的),它也很清晰。我的建议与我的答案类似。将alpha保留为CGFloat,并与0.0进行比较。或者可能是一个小数字,如“如果alpha<0.01”
CGFloat bgColorAlpha = CGColorGetAlpha(self.aView.backgroundColor.CGColor);

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