Sto cercando di implementare uno scanner QRCode con le nuove funzionalità di iOS 7 ma il mio codice non chiama il metodo principale AVCaptureMetadataOutputObjectsDelegate
.iOS 7 AVCaptureMetadataOutput delegate (scanner QRCode)
Ho usato la videocamera AVFoundation prima e con la mia attuale implementazione ho il livello di anteprima in esecuzione senza problemi. Anche riportare la mia uscita su AVCaptureVideoDataOutput
conferma l'impostazione della mia sessione.
Sto usando questo NSHipster post come linea guida ed ecco il mio codice finora:
Interfaccia:
@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
Setup:
- (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];
}
delegato Metodo:
// DELEGATE METHOD NOT CALLED
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSLog(@"Metadata");
}
Qualsiasi aiuto è molto apprezzato!
Bravo signore! Complimenti extra per essere un autodidatta così veloce. Prevedo che molti sviluppatori troveranno la tua risposta molto utile una volta che saranno maggiormente coinvolti con le nuove funzionalità di iOS 7. –
Aveva senso una volta che ci pensavo - i metadati ovviamente non possono essere conosciuti fino a quando l'oggetto metadati non viene associato al dispositivo. –
Ho inserito il mio piccolo progetto di esempio su github se qualcuno fosse interessato: https://github.com/kpmiller/ios7-barcode –