2014-02-16 61 views
0

我正在製作一個應用程序,該視圖在此視圖中具有相機預覽我想繪製相機數據,以及另一個視圖,例如捕獲數據時顯示一個小矩形,在BarCode掃描場景中,攝像機顯示在視圖中,當發現BarCode發現矩形時,將顯示它已掃描條形碼。 我現在的視圖層次是以下幾點:在相機視圖中顯示UIView

View 
{ 
    -UIView cameraHolder 
    { 
     -UIView highlightView 
    } 
} 

我設法讓相機顯示和掃描的東西,但亮點查看它沒有被顯示,爲什麼會出現這種情況?

這是初始化亮點查看代碼:

-(void)setUpHiglightView{ 
    self.highlightView = [[UIView alloc] init]; 
    self.highlightView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin; 
    self.highlightView.layer.borderColor = [UIColor greenColor].CGColor; 
    self.highlightView.layer.borderWidth = 3; 
} 

,這是當數據它捕獲的代碼:

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ 
    CGRect highlightViewRect = CGRectZero; 
    AVMetadataMachineReadableCodeObject *barCodeObject; 
    NSString *detectionString = nil; 

    NSArray *barCodeTypes = @[AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, 
           AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code, 
           AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode]; 

    for(AVMetadataObject *metadata in metadataObjects){ 
     for(NSString *type in barCodeTypes){ 
      if([metadata.type isEqualToString:type]){ 
       barCodeObject = (AVMetadataMachineReadableCodeObject *)[prevLayer transformedMetadataObjectForMetadataObject:(AVMetadataMachineReadableCodeObject*)metadata]; 
       highlightViewRect = barCodeObject.bounds; 
       detectionString = [(AVMetadataMachineReadableCodeObject*)metadata stringValue]; 
       break; 
      } 
     } 
    } 


    if(detectionString != nil){ 
     [self.itemIdTextField setText:detectionString]; 
    }else{ 
     //NSLog(@"Got Nothing"); 
    } 

    NSLog(@"Position: [%f,%f][%f,%f]",highlightViewRect.origin.x, highlightViewRect.origin.y,highlightViewRect.size.height, highlightViewRect.size.width); 

    self.highlightView.frame = highlightViewRect; 
} 

也是初始化相機代碼:

-(void)setupBarCodeScanner{ 
    [self setUpHiglightView]; 

    session = [[AVCaptureSession alloc] init]; 
    device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    NSError *error = nil; 

    input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; 
    if(input){ 
     [session addInput:input]; 
    }else{ 
     [self showAlertDialogWithTitle:@"Error" andMessage:@"There was an error while accessing your camera"]; 
     NSLog(@"Error: %@", error); 
    } 

    output = [[AVCaptureMetadataOutput alloc] init]; 
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; 
    [session addOutput:output]; 

    output.metadataObjectTypes = [output availableMetadataObjectTypes]; 

    prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:session]; 
    prevLayer.frame = self.cameraHolder.bounds; 
    prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
    [self.cameraHolder.layer addSublayer:prevLayer]; 
} 

非常感謝!

回答

1

添加self.highlightView在captureOutput年底self.view:

[self.view addSubview:self.highlightView]; 
0

它看起來不像你在任何地方添加視圖。你創建它並設置其frame,但我沒有看到你添加到視圖層次結構的位置。

相關問題