1

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

Так что, если кто-нибудь может помочь мне понять, как это сделать правильно и, возможно, написать комментарии в коде. Спасибо за помощь. David 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 
+0

См. Мой ответ здесь для справок в будущем: http://stackoverflow.com/questions/3190034/turn-on-torch-flash-on-iphone-4/3367424#3367424 – iwasrobbed

ответ

1

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

Чтобы переключить состояние факела, добавьте BOOL torchAlreadyOn; в раздел @interface (.h). Затем переместите свой код viewDidLoad в метод pressButton. Затем, в конце метода pressButton, добавьте:

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

Тогда везде, где вы установите состояние горелки в положение включено, заключите его в если ... 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]; 
+0

jrtc27, есть все равно, чтобы контролировать тепло когда вспышка включена? устройство становится действительно горячим !!! Или это просто так? –

+0

К сожалению, тепло не контролируется, так как светодиод включен или выключен. – jrtc27

+1

Просто fyi .. просто попробовал этот фрагмент и, похоже, затормозил приложение, когда вы его отключили. – iwasrobbed

1

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

Смежные вопросы