Ios 设置预览层的帧会导致不正确的帧设置
我的PBJVision有点问题 我将其集成到Swift项目中,当我试图设置预览层的框架时,它会导致框架不一致: 我有以下代码:Ios 设置预览层的帧会导致不正确的帧设置,ios,swift,pbjvision,Ios,Swift,Pbjvision,我的PBJVision有点问题 我将其集成到Swift项目中,当我试图设置预览层的框架时,它会导致框架不一致: 我有以下代码: var _previewLayer: AVCaptureVideoPreviewLayer = PBJVision.sharedInstance().previewLayer @IBOutlet weak var previewView: UIView! // this is the white view in the back let bounds = self.
var _previewLayer: AVCaptureVideoPreviewLayer = PBJVision.sharedInstance().previewLayer
@IBOutlet weak var previewView: UIView! // this is the white view in the back
let bounds = self.previewView.layer.bounds
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
_previewLayer.bounds = bounds
_previewLayer.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))
previewView.layer.addSublayer(_previewLayer)
当
预览视图
显示其子视图时,您是否尝试过调整预览层
框架的大小
子类UIView
对于您的previewView
,为您的AVCaptureVideoPreviewLayer
设置一个属性,并将其帧设置为与视图的边界相匹配:
class PreviewView: UIView {
let previewLayer: AVCaptureVideoPreviewLayer?
override func layoutSubviews() {
self.previewLayer?.frame = self.bounds;
}
}
我也有同样的问题
我尝试了@rkyr推荐(在viewdilayoutsubviews
方法中设置框架),但没有成功。我还想在不添加子类的情况下修复它
我可以通过两个更改来修复它:
-确保previewLayer定义为AVCaptureVideoPreviewLayer
(CALayer
的子类),而不是CALayer
,这是我的情况
var previewLayer: AVCaptureVideoPreviewLayer? // :CALayer
- 确保设置了图层的边框,并在设置了图层会话的所有设置后将其添加到视图中:此代码有效:
captureSession = AVCaptureSession() let captureDevice = AVCaptureDevice.default(for: AVMediaType.video) do { let input = try AVCaptureDeviceInput(device: captureDevice!) captureSession?.addInput(input) } catch { onErrorCloseAndReturn(error: error) } let dataOutput = AVCaptureVideoDataOutput() dataOutput.videoSettings = [((kCVPixelBufferPixelFormatTypeKey as NSString) as String): NSNumber(value: kCVPixelFormatType_32BGRA)] dataOutput.alwaysDiscardsLateVideoFrames = true if captureSession!.canAddOutput(dataOutput) { captureSession?.addOutput(dataOutput) } captureSession?.commitConfiguration() let queue = DispatchQueue(label: "captureQueue") dataOutput.setSampleBufferDelegate(self, queue: queue) captureSession?.startRunning() previewLayer = AVCaptureVideoPreviewLayer(session: captureSession!) previewLayer?.frame = self.view.layer.bounds self.view.layer.addSublayer(previewLayer!)
我觉得这很有帮助。。。e您将此代码放在哪里?您是否使用自动布局构建界面?如果是这样,并且在布局准备就绪之前使用此代码,则在
bounds
变量中得到错误的大小。您可以尝试将其放入viewdilayoutsubviews
方法中