2014-08-31 3 views
0

У меня есть приложение IPad, что я хочу, чтобы добавить считыватель штрих-кодов, чтобы ... это код для инициализации кода Barcoder:Как отменить UIView после сканирования штрих-кода?

-(void) scanInitializationCode { 

_highlightView = [[UIView alloc] init]; 
_highlightView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin; 
_highlightView.layer.borderColor = [UIColor greenColor].CGColor; 
_highlightView.layer.borderWidth = 3; 
[self.view addSubview:_highlightView]; 

// define the label to display the results of the scan 
_label = [[UILabel alloc] init]; 
_label.frame = CGRectMake(0, self.view.bounds.size.height - 40, self.view.bounds.size.width, 40); 
_label.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; 
_label.backgroundColor = [UIColor colorWithWhite:0.15 alpha:0.65]; 
_label.textColor = [UIColor whiteColor]; 
_label.textAlignment = NSTextAlignmentCenter; 
_label.text = @"(none)"; 
[self.view addSubview:_label]; 

// session initialization 
_session = [[AVCaptureSession alloc] init]; 
_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
NSError *error = nil; 

// define the input device 
_input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error]; 
if (_input) { 
    [_session addInput:_input]; 
} else { 
    NSLog(@"Error: %@", error); 
} 

// and output device 
_output = [[AVCaptureMetadataOutput alloc] init]; 
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; 
[_session addOutput:_output]; 

_output.metadataObjectTypes = [_output availableMetadataObjectTypes]; 

// and preview layer 
_prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session]; 
_prevLayer.frame = self.view.bounds; 
_prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
[self.view.layer addSublayer:_prevLayer]; 

}

Это код AVCaptureMetadataOutputObjectsDelegate:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { 

CGRect highlightViewRect = CGRectZero; 
AVMetadataMachineReadableCodeObject *barCodeObject; 
NSString *detectionString = nil; 
NSArray *barCodeTypes = @[AVMetadataObjectTypeEAN13Code]; 

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) { 

     _label.text = detectionString; 
     oISBNField.text = detectionString; // move detectionString to ISBN textbox 
     [_session stopRunning]; 
     [_highlightView removeFromSuperview]; 
     break; 
    } 
    else 
     _label.text = @"(none)"; 
} 

Это код, который запускает процесс сканирования при наличии пользователю нажать на UIButton:

- (IBAction)aReadBarcode:(UIButton *)sender { 

[self scanInitializationCode]; 

[_session startRunning]; 

// display the activity 
[self.view bringSubviewToFront:_highlightView]; 
[self.view bringSubviewToFront:_label]; 

oISBNField.text = scanResults; 

} 

Проблема заключается в том, что после сканирования штрих-код он остается видимым; то, что я хочу сделать, это вернуть его в UIView, у которого есть кнопка, которая заставила его начать сканирование (другими словами, я хочу, чтобы исчезло _highlightView). Я пробовал всевозможные методы «увольнения», даже помещая его в обратную сторону z-порядка, но никто из них не работает. Как я могу сделать highlightView исчезнуть с экрана?

+0

Просто скажите: «highlightView» вид, который вы действительно хотите удалить? Как насчет 'prevLayer'? – keeshux

ответ

0

Ответ:

[_prevLayer removeFromSuperlayer]; после [_session stopRunning]

+0

Я обычно повышаю полезные комментарии. знак равно – keeshux

Смежные вопросы