0

只有当我使用它来调整 previewLayer 的大小时,transformedMetadataObjectForMetadataObject 返回的问题是不稳定的(每次更新时两个大小之间的大小跳转)大小。

    for(AVMetadataObject *metadataObject in metadataObjects) {
        if([metadataObject.type isEqualToString:AVMetadataObjectTypeFace]) {
            // Take an image of the face and pass to CoreImage for detection


            AVMetadataObject *metadataObjectR=[previewLayer transformedMetadataObjectForMetadataObject:metadataObject];


            previewLayer.bounds = CGRectMake(previewLayer.bounds.origin.x,previewLayer.bounds.origin.y, metadataObjectR.bounds.size.width,metadataObjectR.bounds.size.height);

创建 previewLayer 的代码(previewViewLayer 是 CALayer)

[captureSession addInput:vInput];
[captureSession setSessionPreset:AVCaptureSessionPresetPhoto];

previewViewLayer = [self.view layer];
[previewViewLayer setBackgroundColor:(__bridge CGColorRef _Nullable)([UIColor blackColor])];
previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
[previewLayer setFrame:[previewViewLayer bounds]];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[previewViewLayer addSublayer:previewLayer];
4

1 回答 1

0

我不知道你想做什么。函数transformMetadataObjectForMetadataObject,返回previewLayer坐标中的metaDataObject,所以它的边界是metaDataObject的框架。但是你使用这个框架来设置previewLayer的边界。previewLayer的框架不应该改变,因为它是用来预览相机的。你应该使用新的元数据对象的边界来改变图层的框架指示人脸。

于 2017-08-03T15:52:05.177 回答