-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 ステートメントが次のようになるように一緒if(switch1.on){}に変更する必要があることを確認する場所:if(yes==YES){}

-(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

には、プロパティ用の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 に答える
0

あなたのIBActionメソッドは、スイッチのゲッターと似た形をしているようです。これにより、望ましくない副作用が生じる可能性があります。メソッドを 1 つのメソッドにリファクタリングし、優れたプログラミング プラクティスに合わせます。

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

また、あなたのコードでは、onプロパティはオンまたはオフに切り替えられるものに実際には影響を与えないようです。この条件を含めます。

于 2013-06-30T11:37:59.383 に答える