2017-12-04 10 views
1

更新されました!objective-c metadataOutputRectOfInterestForRect戻り値{{0、0}、{0、0}}

AVCaptureMetadataOutput rectOfInterestを使用するために、矩形の変換にmetadataOutputRectOfInterestForRectを使用しています。

NSError *error; 

AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error]; 

if (!input) { 
    NSLog(@"%@", [error localizedDescription]); 
    return NO; 
} 

_captureSession = [[AVCaptureSession alloc] init]; 
[_captureSession addInput:input]; 

_videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession]; 
[_videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 
[_videoPreviewLayer setFrame:_viewPreview.bounds]; 
[_viewPreview.layer addSublayer:_videoPreviewLayer]; 
[_viewPreview bringSubviewToFront:_lblGuide]; 
[_viewPreview bringSubviewToFront:_vFocus]; 

CGRect visibleMetadataOutputRect = [_videoPreviewLayer metadataOutputRectOfInterestForRect:CGRectMake(0, 0, 100, 100)]; 
NSLog(@"--- log convert: %@", NSStringFromCGRect(visibleMetadataOutputRect)); 
NSLog(@"--- log _videoPreviewLayer: %@", NSStringFromCGRect(_videoPreviewLayer.bounds)); 
NSLog(@"--- log _viewPreview: %@", NSStringFromCGRect(_viewPreview.bounds)); 

_captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init]; 
[_captureSession addOutput:_captureMetadataOutput]; 

_dispatchQueue = dispatch_queue_create("myQueue", NULL); 
[_captureMetadataOutput setMetadataObjectsDelegate:self queue:_dispatchQueue]; 
[_captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]]; 
[_captureMetadataOutput setRectOfInterest:visibleMetadataOutputRect]; 

[_captureSession startRunning]; 

return YES; 

とのNSLog resut:

[5082:1768978] --- log convert: {{0, 0}, {0, 0}} 
[5082:1768978] --- log _videoPreviewLayer: {{0, 0}, {320, 468}} 
[5082:1768978] --- log _viewPreview: {{0, 0}, {320, 468}} 

はそれを解決するために私を助けてくださいCGRectに変換するときしかし、それは常に0

はここに私のコードです返します。

+0

あなたは '' '_viewPreview.bounds'''と' '' _videoPreviewLayer.bounds'''のログを教えてください。これらのビューを設定した後、可視範囲を設定する必要があります。 –

+0

@BenAvery私はより多くのログを更新しました。ありがとうございました! –

答えて

1

私は簡単な解決策を見つけてくれました。

ちょうどそれがうまく機能し[_captureSession startRunning]

CGRect visibleMetadataOutputRect = [_videoPreviewLayer metadataOutputRectOfInterestForRect:self.vFocus.frame]; 
    [_captureMetadataOutput setRectOfInterest:visibleMetadataOutputRect]; 

後のコードの2行を移動!

関連する問題