Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 按一个按钮启动应用程序_Iphone_Objective C_Uibutton_Avcapturesession_Avcapturedevice - Fatal编程技术网

Iphone 按一个按钮启动应用程序

Iphone 按一个按钮启动应用程序,iphone,objective-c,uibutton,avcapturesession,avcapturedevice,Iphone,Objective C,Uibutton,Avcapturesession,Avcapturedevice,因此,我制作了一个自定义UIButton,并将其添加到代码中,并在interfacebuiler中建立了连接。我想让这个按钮作为一个开和关的开关,我该如何正确地做到这一点?我是iphone开发的初学者,这是我在夏天参加的这门课的一个学校项目,为下学期的开学做准备 因此,如果有人能帮助我理解如何以正确的方式做到这一点,也许可以在代码中写注释。谢谢你的帮助。 大卫H 这是我的密码: // // FlashlightViewController.h // #import <UIKit/UIK

因此,我制作了一个自定义UIButton,并将其添加到代码中,并在interfacebuiler中建立了连接。我想让这个按钮作为一个开和关的开关,我该如何正确地做到这一点?我是iphone开发的初学者,这是我在夏天参加的这门课的一个学校项目,为下学期的开学做准备

因此,如果有人能帮助我理解如何以正确的方式做到这一点,也许可以在代码中写注释。谢谢你的帮助。 大卫H

这是我的密码:

//
//  FlashlightViewController.h
//

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface FlashlightViewController : UIViewController {

    AVCaptureSession *torchSession;
    IBOutlet UIButton *button;
}

-(IBAction)pressButton:(id) sender;

@property (nonatomic, retain) AVCaptureSession *torchSession;
@property (nonatomic, retain) IBOutlet UIButton *button;

@end

你到底有什么问题?有一个内置对象。如果您想要创建一个自定义的,那么您可以跟踪bool标志并在按钮处理程序中切换它

在您的
@界面
部分(.h),您还需要
IBOutlet iAction按钮。然后,在Interface Builder的inspector(outlet部分)中,选择文件的所有者,并将
按按钮:
连接到UIButton的
内部触摸操作

要切换火炬状态,请添加
BOOL torchAlreadyOn
@接口
部分(.h)。然后,将您的
viewDidLoad
自定义代码移动到
按钮
方法。然后,在
方法的末尾按按钮
添加:

if (torchAlreadyOn) {
    torchAlreadyOn = NO;
}
else {
    torchAlreadyOn = YES;
}
然后,在将火炬状态设置为on的任何地方,将其包含在检查
BOOL
的if…else语句中:

AVCaptureSession *session = [[AVCaptureSession alloc] init];

[session beginConfiguration];

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

if ([device hasTorch] && [device hasFlash]){
    [device lockForConfiguration:nil];

    if (torchAlreadyOn) {
        [device setTorchMode:AVCaptureTorchModeOn];
        [device setFlashMode:AVCaptureFlashModeOn];
    }
    else {
        [device setTorchMode:AVCaptureTorchModeOff];
        [device setFlashMode:AVCaptureFlashModeOff];
    }
    [device unlockForConfiguration];

    AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
    if (flashInput){
        if (!torchAlreadyOn) {
            [session addInput:flashInput];
        }
        else {
            [session removeInput:flashInput];
        }
    }

    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
    if (!torchAlreadyOn) {
        [session addOutput:output];
    }
    else {
        [session removeOutput:output];
    }
    [output release];
    [session commitConfiguration];

    [session startRunning];
}

[self setTorchSession:session];
[session release];

jrtc27,闪光灯打开时是否有控制热量的方法?设备变得非常热!!!还是他们就是这样?可悲的是,温度超出了你的控制范围,因为LED灯不是亮就是灭。仅供参考。。刚刚尝试了这个片段,当你关闭它时,它似乎冻结了应用程序。请在此处查看我的答案以备将来参考:将此贴在我的头顶-kudos@iwasrobed-+2请在此处查看我的答案以备将来参考:
AVCaptureSession *session = [[AVCaptureSession alloc] init];

[session beginConfiguration];

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

if ([device hasTorch] && [device hasFlash]){
    [device lockForConfiguration:nil];

    if (torchAlreadyOn) {
        [device setTorchMode:AVCaptureTorchModeOn];
        [device setFlashMode:AVCaptureFlashModeOn];
    }
    else {
        [device setTorchMode:AVCaptureTorchModeOff];
        [device setFlashMode:AVCaptureFlashModeOff];
    }
    [device unlockForConfiguration];

    AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
    if (flashInput){
        if (!torchAlreadyOn) {
            [session addInput:flashInput];
        }
        else {
            [session removeInput:flashInput];
        }
    }

    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
    if (!torchAlreadyOn) {
        [session addOutput:output];
    }
    else {
        [session removeOutput:output];
    }
    [output release];
    [session commitConfiguration];

    [session startRunning];
}

[self setTorchSession:session];
[session release];