Haz un botón para iniciar la aplicación
-
17-09-2020 - |
Pregunta
Así que creé un UIButton personalizado, lo agregué al código e hice las conexiones en interfacebuiler.Quiero que el botón funcione como interruptor de encendido y apagado, ¿cómo hago esto correctamente?Soy un principiante en el desarrollo de iPhone y esto es para un proyecto escolar para esta clase que tomaré durante el verano para tener una ventaja para el próximo semestre.
Entonces, si alguien puede ayudarme a comprender cómo hacer esto de la manera correcta y tal vez escribir comentarios en el código.Gracias por toda la ayuda.David h.
Aquí está mi código:
//
// 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
Aquí está el archivo .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
Solución
En tus @interface
sección (.h), también necesita IBOutlet IBAction pressButton;
.Luego, en Interface Builder, en el inspector (sección de salida), seleccione Propietario del archivo y conéctese pressButton:
al UIButton Touch Up Inside
acción.
Para alternar el estado de la antorcha, agregue BOOL torchAlreadyOn;
hacia @interface
sección (.h).Luego, mueve tu viewDidLoad
código personalizado para el pressButton
método.Luego, al final del pressButton
método, agregue:
if (torchAlreadyOn) {
torchAlreadyOn = NO;
}
else {
torchAlreadyOn = YES;
}
Luego, en todos los lugares donde haya activado el estado de la antorcha, enciérrelo en una declaración if...else que verifique el estado de la antorcha. 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];
Otros consejos
¿Cuál es tu problema en realidad?Hay un incorporado en Uiswitch objeto.Y si desea crear una personalizada, puede realizar un seguimiento de una bandera de BOOL y alternarlo en el controlador de botones.