J'essaie d'implémenter un scanner QRCode avec les nouvelles fonctionnalités iOS 7 mais mon code n'appelle pas la méthode principale AVCaptureMetadataOutputObjectsDelegate
.iOS 7 Délégué AVCaptureMetadataOutput (scanner QRCode)
J'ai utilisé la caméra AVFoundation avant et avec ma mise en œuvre actuelle j'ai la couche de prévisualisation en cours d'exécution sans problème. Même la commutation de ma sortie vers AVCaptureVideoDataOutput
valide ma configuration de session.
J'utilise ce NSHipster post comme ligne directrice et voici mon code jusqu'à présent:
Interface:
@import AVFoundation;
@interface QRCodeViewController() <AVCaptureMetadataOutputObjectsDelegate>
@property (strong, nonatomic) AVCaptureDevice* device;
@property (strong, nonatomic) AVCaptureDeviceInput* input;
@property (strong, nonatomic) AVCaptureMetadataOutput* output;
@property (strong, nonatomic) AVCaptureSession* session;
@property (strong, nonatomic) AVCaptureVideoPreviewLayer* preview;
@end
Configuration:
- (void)setupCamera
{
// Device
self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// Input
self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];
// Output
self.output = [[AVCaptureMetadataOutput alloc] init];
[self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
// Session
self.session = [[AVCaptureSession alloc] init];
[self.session addInput:self.input];
[self.session addOutput:self.output];
// Preview
self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.preview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view.layer insertSublayer:self.preview atIndex:0];
// Start
[self.session startRunning];
}
Délégué Méthode:
// DELEGATE METHOD NOT CALLED
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSLog(@"Metadata");
}
Toute aide est grandement appréciée!
Bravo monsieur! Bravo supplémentaire d'être un auto-apprenant si rapide. Je prévois que de nombreux développeurs trouveront votre réponse très utile une fois qu'ils seront plus impliqués avec les nouvelles fonctionnalités d'iOS 7. –
C'était logique une fois que j'y pensais - les métadonnées ne peuvent évidemment pas être connues jusqu'à ce que l'objet de métadonnées soit associé à l'appareil. –
J'ai mis mon petit exemple de projet sur github si quelqu'un est intéressé: https://github.com/kpmiller/ios7-barcode –