Question

J'ai donc fait une coutume UIButton et l'a ajouté au code et effectué les connexions dans interfacebuiler.Je veux que le bouton de travailler comme on et off de l'interrupteur, comment puis-je faire cela correctement?Je suis un débutant en développement sur iphone et c'est pour un projet d'école pour cette classe, je suis prise au cours de l'été pour obtenir une longueur d'avance pour le prochain semestre.

Donc, si quelqu'un peut m'aider à comprendre comment ce faire de la bonne façon et peut-être écrire des commentaires dans le code.Merci pour toute l'aide.David H.

Voici mon code:

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

Ici est la .m fichier

//
//  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
Était-ce utile?

La solution

Dans votre @interface section (.h), vous avez également besoin d' IBOutlet IBAction pressButton;.Puis, dans Interface Builder, dans l'inspecteur (de sortie), sélectionnez Propriétaire du Fichier, et de se connecter pressButton: à la UIButton de l' Touch Up Inside d'action.

Pour basculer le flambeau de l'etat, ajouter BOOL torchAlreadyOn; à l' @interface section (.h).Ensuite, déplacez votre viewDidLoad le code personnalisé à l' pressButton la méthode.Puis, à la fin de la pressButton méthode, ajouter:

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

Alors, partout où vous définissez le flambeau de l'état sur les, mettez-le dans une instruction if...else qui vérifie l' 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];

Autres conseils

Quel est votre problème réellement?Il y a une construction intégrée Uiswitch objet.Et si vous souhaitez créer une personnalisation personnalisée, vous pouvez suivre une trace d'un drapeau BOOL et basculer dans le gestionnaire de boutons.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top