【发布时间】:2012-08-02 10:39:31
【问题描述】:
我刚刚完成了斯坦福大学使用 AVFoundation 的 iPhone 课程。那节课上,助教让我们制作了一个显示视频的应用程序,然后通过人脸识别将太阳镜戴在脸上。所以我想连接几个开关和滑块来做不同的事情。第一个是改变色调过滤器值的滑块。然后我想切换是否显示太阳镜。但开关不会关闭太阳镜。虽然开关有效。我在属性中声明了一个 BOOL
@property (nonatomic) BOOL sunGlasses;
我合成了它,然后将开关连接到以下动作
- (IBAction)toggleGlasses:(id)sender
{
if (_mySwitch.on)
{
NSLog(@"toggle is on");
self.sunGlasses = YES;
}else {
NSLog(@"toggle is off");
self.sunGlasses = NO;
}
}
然后在-(void) captureOutput的方法下,也就是改变色调的地方,人脸识别被我添加到人脸识别部分
if ((faceFound) && (self.sunGlasses = YES)){
[self.glasses setHidden:NO];
}else{
[self.glasses setHidden:YES];
}
过去只是如果 (faceFound) 然后把眼镜藏起来或给他们看。但是,如果您将开关关闭,这不会让眼镜消失。
【问题讨论】:
-
除了通过赋值检查是否相等(你使用 = 而不是 ==),你不应该检查 BOOL 值是否为 YES。它不是真正的布尔类型,并且可以有很多不同的值(实际上是 256)。你最好把这个语句写成“if (faceFound && self.sunFlasses) {”
-
@Jody Hagins,感谢您的快速回复。你的意思是在右括号后加一个括号吗?我应该检查布尔值为零和一而不是真假吗?再次感谢。
-
我包含大括号只是因为那是我指示要替换的行,并且它在原始行中。不,不要再次检查布尔值是否有任何显式值。任何非零值将是“真”,0 将是“假”。不幸的是,有很多代码(包括苹果示例代码)明确检查是和否。 NO 还不错,因为 false 只是 0。
-
@JodyHagins,非常感谢您的帮助。我想到了。见下文。再次感谢!!
-
您甚至不需要 BOOL 属性,只需使用开关之一即可。您只需将您使用的显式 YES/NO(不是您发布的代码)替换为
[self.glasses setHidden:!_mySwitch.on];
标签: ios xcode boolean avfoundation