-2

在这里,我有一些代码可以检查 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 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];

            }
        }

    }

}
4

2 回答 2

0

您的方法似乎IBAction与开关的吸气剂具有相似的形式。这可能会导致不希望的副作用。将您的方法重构为单个方法,更符合良好的编程习惯:

-(IBAction)switchDidChange:(UISwitch*)aSwitch {
   UISwitch* otherSwitch = (aSwitch == switch1)? switch2 : switch1;
   [otherSwitch setOn:!aSwitch.on animated:YES];
}

此外,在您的代码中,该on属性似乎并没有真正影响打开或关闭的内容。包括这个条件。

于 2013-06-30T11:37:59.383 回答
0

该属性UISwitch有另一个吸气剂on

@property(nonatomic, getter=isOn) BOOL on;

使用.isOn而不是.on获取价值可能会更好。

此外,您的一些代码可以简化:

-(IBAction)switch1{
    [switch2 setOn:!switch1.isOn];    
}

-(IBAction)switch2{
    [switch1 setOn:!switch2.isOn];
}

如果您在方法中使用操作,它会变得更好sender

于 2013-06-30T11:34:07.293 回答