【问题标题】:Make a button start the app制作一个按钮启动应用程序
【发布时间】:2010-07-17 10:23:49
【问题描述】:

所以我制作了一个自定义 UIButton 并将其添加到代码中并在 interfacebuiler 中建立了连接。我希望按钮用作开关,我该如何正确执行此操作?我是 iphone 开发的初学者,这是我在暑假期间参加的这门课程的学校项目,以便为下学期抢占先机。

因此,如果有人可以帮助我了解如何以正确的方式做到这一点,也许可以在代码中编写 cmets。感谢所有的帮助。 大卫 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

这是.m文件

//
//  FlashlightViewController.m
//

#import "FlashlightViewController.h"

@implementation FlashlightViewController
@synthesize torchSession;
@synthesize button;


- (void)viewDidLoad {

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

    [session beginConfiguration];

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    if ([device hasTorch] && [device hasFlash]){
        [device lockForConfiguration:nil];
        [device setTorchMode:AVCaptureTorchModeOn];
        [device setFlashMode:AVCaptureFlashModeOn];
        [device unlockForConfiguration];

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

        AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
        [session addOutput:output];
        [output release];
        [session commitConfiguration];

        [session startRunning];
    }

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

    [super viewDidLoad];
}
- (void)viewDidUnload {
    self.button = nil;
}

- (void)dealloc {
    [TorchSession release];
    [button release];
    [super dealloc];
}
-(IBAction)pressButton : (id) sender{

}
@end

【问题讨论】:

标签: iphone objective-c uibutton avcapturesession avcapturedevice


【解决方案1】:

在您的 @interface 部分 (.h) 中,您还需要 IBOutlet IBAction pressButton;。然后,在 Interface Builder 的检查器(出口部分)中,选择 File's Owner,并将 pressButton: 连接到 UIButton 的 Touch Up Inside 操作。

要切换手电筒状态,请将 BOOL torchAlreadyOn; 添加到 @interface 部分 (.h)。然后,将您的 viewDidLoad 自定义代码移动到 pressButton 方法。然后,在pressButton方法的最后,添加:

if (torchAlreadyOn) {
    torchAlreadyOn = NO;
}
else {
    torchAlreadyOn = YES;
}

然后,在您将手电筒状态设置为开启的任何地方,将其包含在 if...else 语句中,该语句检查 BOOL:

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 指示灯亮或灭,热量无法控制。
  • 仅供参考.. 刚刚尝试了这个 sn-p,当你关闭它时它似乎冻结了应用程序。
  • 请在此处查看我的答案以供将来参考:stackoverflow.com/questions/3190034/…
  • 在我的脑海中发布了这个 - 荣誉@IWasRobbed - +2
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多