2016-09-01 3 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

はなぜ幅私が知っているdon'n show this

(20、40、500、100)CGRectMakeを追加フォローコードを追加しないでください。

答えて

0

変更あなたのAVCaptureVideoPreviewLayerのフレームサイズ:

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

あなたが自動レイアウトを使用している場合、あなたはおそらくそれにあなたのAVCaptureVideoPreviewLayerを追加し、あなたがUIViewサブクラスを作成する必要がありますのでCALayerフレームに対処する必要はありませんそして層のframelayoutSubviewsで設定:

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

IキャプチャのCGRectMake(10、20、100、50)のサイズは以下のコードを変更しない追加する場合。郵便での私の絵を見てください。ありがとうございました。 – Kopiko

関連する問題