2016-09-01 2 views
1

Мне нужно захватить для моего штрих-кода. Но это мой захват кода - полный экран. Как нестандартный размер или исправление до небольшого размера. , пожалуйста, сообщите мне мою идею или код для нестандартного размера.Как нестандартный размер AVcapture

Это мой захват кода - полный экран.

import UIKit 
import AVFoundation 

protocol BarcodeDelegate { 
    func barcodeReaded(barcode: String) 
} 


class barcodeCapViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { 

    var delegate: BarcodeDelegate? 
    var captureSession: AVCaptureSession! 
    var code: String? 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.captureSession = AVCaptureSession(); 

     let videoCaptureDevice: AVCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 

     do { 

      let videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice) 

      if self.captureSession.canAddInput(videoInput) { 
       self.captureSession.addInput(videoInput) 
      } else { 
       print("Could not add video input") 
      } 

      let metadataOutput = AVCaptureMetadataOutput() 
      if self.captureSession.canAddOutput(metadataOutput) { 
       self.captureSession.addOutput(metadataOutput) 

       metadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue()) 
       metadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code] 
      } else { 
       print("Could not add metadata output") 
      } 

      let previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession) 
      previewLayer.frame = self.view.layer.bounds 
      self.view.layer .addSublayer(previewLayer) 
      self.captureSession.startRunning() 
     } catch let error as NSError { 
      print("Error while creating vide input device: \(error.localizedDescription)") 
     } 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { 
     for metadata in metadataObjects { 
      let readableObject = metadata as! AVMetadataMachineReadableCodeObject 
      let code = readableObject.stringValue 
      if !code.isEmpty { 
       self.captureSession.stopRunning() 
       self.dismissViewControllerAnimated(true, completion: nil) 
       self.delegate?.barcodeReaded(code) 
      } 
     } 
    } 

} 

При добавлении CGRectMake (20, 40, 200, 50) show this

Добавить CGRectMake (20, 40, 500, 100) show this

Я don'n знаю, почему ширина и высота не складывается из кода.

ответ

0

Изменить размер кадра вашего AVCaptureVideoPreviewLayer:

let previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession) 
previewLayer.frame = CGRectMake(10, 20, 100, 50) // something else! 

Если вы используете autolayout, вы, вероятно, не хотят иметь дело с CALayer кадров, так что вы должны создать подкласс UIView, добавить свой AVCaptureVideoPreviewLayer к тому, что и установить frame в layoutSubviews слоя:

override func layoutSubviews() { 
    super.layoutSubviews() 
    self.previewLayer.frame = self.frame 
} 
+0

Когда я добавляю CGRectMake (10, 20, 100, 50) размер захвата не меняет код последующих. см. мою фотографию в сообщении. Спасибо. – Kopiko

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