【问题标题】:Dimming the LED for iPhone 5 flashlight app in Xcode在 Xcode 中为 iPhone 5 手电筒应用程序调暗 LED
【发布时间】:2012-11-01 20:22:15
【问题描述】:

我希望使用滑块选项来调暗手电筒的 LED。我知道 Apple 支持 iOS 6,但是我不确定要使用什么代码。这是我目前在 .m 文件中的代码。

-(IBAction)torchOn:(id)sender;
{
    onButton.hidden = YES;
    offButton.hidden = NO;

    onView.hidden = NO;
    offView.hidden = YES;


    AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if([flashLight isTorchAvailable] && [flashLight isTorchModeSupported:AVCaptureTorchModeOn])
    {
        BOOL success = [flashLight lockForConfiguration:nil];
        if(success)
        {
            [flashLight setTorchMode:AVCaptureTorchModeOn];
            [flashLight unlockForConfiguration];
        }
    }
}


-(IBAction)torchOff:(id)sender;
{
    onButton.hidden = NO;
    offButton.hidden = YES;

    onView.hidden = YES;
    offView.hidden = NO;

    AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if([flashLight isTorchAvailable] && [flashLight isTorchModeSupported:AVCaptureTorchModeOn])
    {
        BOOL success = [flashLight lockForConfiguration:nil];
        if(success)
        {
            [flashLight setTorchMode:AVCaptureTorchModeOff];
            [flashLight unlockForConfiguration];
        }
    }
}

【问题讨论】:

  • 那不行吗?我觉得还可以
  • 这是开关灯。我需要用滑块调暗灯光
  • 看我的回答。我已经验证它可以在设备上运行。

标签: iphone ios xcode ios6


【解决方案1】:

- (BOOL)setTorchModeOnWithLevel:(float)torchLevel error:(NSError **)outError

做你想做的事。但是,据我所见,它只在特定的时间间隔内更新(~0.2)。

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[device lockForConfiguration:nil];
[device setTorchModeOnWithLevel:slider.value error:NULL];
[device unlockForConfiguration];

编辑 - 完整示例:

这是一个 UISlider。您需要将 IBAction 插座添加到滑块或以编程方式添加目标(就像我一样):

UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(20.0f, 20.0f, 280.0f, 40.0f)];
slider.maximumValue = 1.0f;
slider.minimumValue = 0.0f;
[slider setContinuous:YES];
[slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:slider];

然后,响应滑块的变化:

- (void)sliderDidChange:(UISlider *)slider
{
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    [device lockForConfiguration:nil];
    [device setTorchModeOnWithLevel:slider.value error:NULL];
    [device unlockForConfiguration];
}

【讨论】:

  • 我已经添加了这个,但不确定我是否将它添加到正确的位置。我是否将其添加到另一个名为 torchDim 的 IBAction 下?
  • 添加了示例代码。每当 UISlider 的值发生变化时,您都需要一个回调,然后您可以将该值设置为 torchLevel
  • 那么 BOOL 代码去哪里了。我是否像在 IBAction 中一样将其放置在 torchOn 下方?
  • 看看我的sliderDidChange: 例子。是的,您在称为 torchDim 的某个 IBAction 中调用 setTorchModeOnWithLevel:error:,就像您的 torchOn 和 torchOff 一样。
  • 太棒了。谢谢你。我非常接近这一点。我收到此警告“'slider' 的本地声明隐藏了实例变量。
【解决方案2】:

如果有两个滑块,那是因为滑块设置在 m 中。文件你必须删除代码的[self.view addSubview:slider]; 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多