这里我有一些代码可以检查iphone是否有相机闪光灯。然后使用以下代码检查我的开关是否打开:
if(switch1.on){
}
在没有此代码的情况下,指示灯会亮起,我也尝试过这段代码:
if(!(switch1.on)){
}
成功打开相机闪光灯,但即使开关设定为关闭也会打开相机
这是我的完整代码:
-(IBAction)torchon:(id)sender{
AVCaptureDevice *flashlight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([flashlight isTorchAvailable] & [flashlight isTorchModeSupported:AVCaptureTorchModeOn]) {
BOOL success = [flashlight lockForConfiguration:Nil];
if(success){
if(switch1.on){ //// or (!(switch1.on))
on.hidden = YES;
[UIScreen mainScreen].brightness = 1.0;
[flashlight setTorchMode:AVCaptureTorchModeOn];
[flashlight unlockForConfiguration];
}
}
}
}
任何帮助将不胜感激
**EDIT:**
这是代码,当交换机的值发生变化时,我使用ibactions将交换机设置为no。此代码成功运行:
-(IBAction)switch1{
if (switch1.on) {
switch1.on = YES;
switch2.on = NO;
} else{
switch2.on = YES;
switch1.on = NO;
}
}
-(IBAction)switch2{
if (switch2.on) {
switch2.on = YES;
switch1.on = NO;
} else{
switch1.on = YES;
switch2.on = NO;
}
}
答案
首先添加一个bool:
bool yes;
然后在viewdidload
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
yes = YES;
}
之后在调用ibaction时将其设置为YES,并在关闭开关后将其设置为NO:
-(IBAction)switch1{
if (swich1.on) {
swich1.on = YES;
swich2.on = NO;
yes = YES;
}
}
-(IBAction)switch2{
if (swich2.on) {
swich2.on = YES;
swich1.on = NO;
yes = NO;
}
}
最后在检查if(switch1.on){}
时,你需要将其更改为if(yes==YES){}
,以便if语句如下所示:
-(IBAction)torchon:(id)sender{
AVCaptureDevice *flashlight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([flashlight isTorchAvailable] & [flashlight isTorchModeSupported:AVCaptureTorchModeOn]) {
BOOL success = [flashlight lockForConfiguration:Nil];
if(success){
if(yes==YES){
on.hidden = YES;
[UIScreen mainScreen].brightness = 1.0;
[flashlight setTorchMode:AVCaptureTorchModeOn];
[flashlight unlockForConfiguration];
}
}
}
}
答案 0 :(得分:0)
UISwitch
有on
属性的另一个getter。
@property(nonatomic, getter=isOn) BOOL on;
最好使用.isOn
代替.on
来获取值。
此外,您的一些代码可以简化:
-(IBAction)switch1{
[switch2 setOn:!switch1.isOn];
}
-(IBAction)switch2{
[switch1 setOn:!switch2.isOn];
}
如果在方法中使用sender
动作,情况会更好。
答案 1 :(得分:0)
您的IBAction
方法似乎与交换机的getter类似。这可能会导致不希望的副作用。将您的方法重构为单个方法,更符合良好的编程习惯:
-(IBAction)switchDidChange:(UISwitch*)aSwitch {
UISwitch* otherSwitch = (aSwitch == switch1)? switch2 : switch1;
[otherSwitch setOn:!aSwitch.on animated:YES];
}
此外,在您的代码中,on
属性似乎并不会影响打开或关闭的内容。包括这个条件。