Сделать кнопку, чтобы запустить приложение - PullRequest
1 голос
/ 17 июля 2010

Итак, я сделал пользовательский UIButton, добавил его в код и установил соединения в interfacebuiler.Я хочу, чтобы кнопка работала как переключатель включения и выключения, как мне сделать это правильно?Я новичок в разработке iphone, и это для школьного проекта для этого класса, который я беру летом, чтобы получить старт в следующем семестре.

Так что, если кто-нибудь может помочь мне понять, как это сделатьэто правильный путь и, возможно, написать комментарии в коде.Спасибо за помощь.Дэвид Х.

Вот мой код:

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

Ответы [ 2 ]

1 голос
/ 18 июля 2010

В вашем @interface разделе (.h) вам также нужно IBOutlet IBAction pressButton;. Затем в Интерфейсном Разработчике в инспекторе (раздел розетки) выберите «Владелец файла» и подключите pressButton: к действию Touch Up Inside UIButton.

Чтобы переключить состояние горелки, добавьте 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];
1 голос
/ 17 июля 2010

В чем ваша проблема на самом деле? Существует встроенный объект UISwitch . А если вы хотите создать пользовательский, вы можете отслеживать флаг bool и переключать его в обработчике кнопок.

...