Tôi đang cố gắng triển khai máy quét QRCode với các tính năng iOS 7 mới nhưng mã của tôi không gọi phương thức chính là AVCaptureMetadataOutputObjectsDelegate
.iOS 7 AVCaptureMetadataOutput delegate (Trình quét QRCode)
Tôi đã sử dụng máy ảnh AVFoundation trước và với triển khai hiện tại của tôi, tôi đã có lớp xem trước đang chạy mà không gặp sự cố. Ngay cả khi chuyển đầu ra của tôi trở lại thành AVCaptureVideoDataOutput
xác thực cài đặt phiên của tôi.
Tôi đang sử dụng NSHipster post này làm kim chỉ nam và đây là mã của tôi cho đến nay:
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
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];
}
Đại biểu Phương pháp:
// DELEGATE METHOD NOT CALLED
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSLog(@"Metadata");
}
Bất kỳ trợ giúp nào được đánh giá cao!
Bravo sir! Kudos bổ sung để trở thành một người tự học nhanh như vậy. Tôi dự đoán nhiều nhà phát triển sẽ thấy câu trả lời của bạn rất hữu ích khi họ tham gia nhiều hơn với các tính năng mới của iOS 7. –
Nó có ý nghĩa một khi tôi nghĩ về nó - siêu dữ liệu rõ ràng là không thể được biết đến cho đến khi đối tượng siêu dữ liệu được kết hợp với thiết bị. –
Tôi đặt dự án mẫu nhỏ của tôi trên github nếu có ai quan tâm: https://github.com/kpmiller/ios7-barcode –