У меня возникла проблема со сканером QR-кода на моем iPad 7-го поколения под управлением ipadOS 17.4. Хотя сканер работает нормально на последнем iPad 10-го поколения (также на ipadOS 17.4), он вообще не работает на iPad 7-го поколения (ipadOS 17.4) на моем устройстве.
Это не так. Возможно, эта проблема затрагивает другие модели iPad, но на данный момент я протестировал только эти две модели.
Кто-нибудь еще сталкивался с подобными проблемами со сканером QR-кода? Мы будем очень признательны за любые предложения по устранению неполадок или потенциальному исправлению.
Список опробованных устройств:
- ipad 6Gen: КО
- ipad 7Gen: KO
- iPad 10Gen: ОК
- iPhone 15: ОК
Я пытался загрузить проект AVCam из официальной документации Apple, и я подтверждаю, что это не работает даже в их Swift проекте. Но распознавание лиц работает
MetadataOutput
Код: Выделить всё
captureObject = [[AVCaptureMetadataOutput alloc]init];
objectQueue = dispatch_queue_create("VideoDataOutputQueue", NULL);//dispatch_queue_create("newQueue", NULL);
[captureObject setMetadataObjectsDelegate:self queue:objectQueue];
делегирования:
Код: Выделить всё
objectQueue = dispatch_queue_create("VideoDataOutputQueue", NULL);//dispatch_queue_create("newQueue", dispatch_get_main_queue());
Код: Выделить всё
- (void)captureOutput:(AVCaptureOutput *)output didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
if (metadataObjects != nil && metadataObjects.count > 0) {
NSLog(@"%@", [metadataObjects objectAtIndex:0]);
}
}
}
На данный момент не существует решения, но я использовал обходное решение, используя AVCaptureVideoDataOutputSampleBufferDelegate.
Затем используйте следующий вывод:
Код: Выделить всё
self.videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
[self.videoDataOutput setSampleBufferDelegate:self queue:dispatchQueue];
if ([_captureSession canAddOutput:self.videoDataOutput]) {
[_captureSession addOutput:self.videoDataOutput];
}
Код: Выделить всё
- (void)captureOutput:(AVCaptureOutput *)output didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
if (imageBuffer == NULL) {
return;
}
CIImage *ciImage = [CIImage imageWithCVImageBuffer:imageBuffer];
[self detectQRCode:ciImage];
}
-(void)detectQRCode:(CIImage *)image {
NSDictionary* options;
CIContext* context = [CIContext context];
options = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh };
CIDetector* qrDetector = [CIDetector detectorOfType:CIDetectorTypeQRCode
context:context
options:options];
// if ([[image properties] valueForKey:(NSString*) kCGImagePropertyOrientation] == nil) {
// options = @{ CIDetectorImageOrientation : @1};
// } else {
// options = @{ CIDetectorImageOrientation : [[image properties] valueForKey:(NSString*) kCGImagePropertyOrientation]};
// }
NSArray * features = [qrDetector featuresInImage:image options:options];
if (features == nil || [features count] == 0) {
return;
}
CIQRCodeFeature *metadataObj = [features firstObject];
NSString *qrString = [NSString stringWithString:metadataObj.messageString];
NSLog(@"feature: %@",qrString);
}
Источник: https://stackoverflow.com/questions/781 ... -qrscanner
Мобильная версия