【问题标题】:AVCaptureVideoPreviewLayer appears to be escaping parent boundsAVCaptureVideoPreviewLayer 似乎正在逃避父边界
【发布时间】:2019-06-22 03:26:07
【问题描述】:

我在将 AVCaptureVideoPreviewLayer 装入其父边界时遇到问题。

这是上下文代码:

    capturePreview = AVCaptureVideoPreviewLayer(session: captureSession)
    guard let capturePreview = capturePreview else { return }

当我有

   capturePreview.frame = cameraView.bounds
   cameraView.layer.addSublayer(capturePreview)

会发生以下情况:

当我有

capturePreview.bounds = cameraView.layer.bounds
cameraView.layer.addSublayer(capturePreview)

发生这种情况

我正在尝试让预览层适合下一张图片中的黑框

根据我在文档中看到的内容,我不确定我哪里出错了。谢谢你的帮助。作为参考,我将添加我在情节提要中给出的约束。

【问题讨论】:

  • 在viewdidlayout子视图中设置预览层的Frame

标签: ios view storyboard constraints addsubview


【解决方案1】:

您是否尝试过使用类似的东西:

capturePreview.frame = cameraView.bounds
cameraView.layer.addSublayer(capturePreview)
cameraView.clipsToBounds = true

【讨论】:

  • 嗯,这很尴尬。谢谢你。你知道为什么这会导致这个问题吗?
  • 据我所知,在 iOS 中,默认情况下 UIViews 不会剪切子视图。预览层大概有一定的固定纵横比,所以当你的cameraView的frame有不同的纵横比时,预览层会超出cameraView的边界,但它仍然是可见的,所以设置clipsToBounds只是剪掉了外面的部分cameraView,这可能是你想要的。
【解决方案2】:

您是否添加了将capturePreview 附加到cameraView 的约束?您将需要在代码中执行此操作。添加约束,以便capturePreview 的左、右、上和下边缘附加到cameraView 的相应边缘。

目标 C

NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0];
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0];
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:capturePreview attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:cameraView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];

[NSLayoutConstraint activateConstraints:@[topConstraint, bottomConstraint, leftConstraint, rightConstraint]];

斯威夫特

let topConstraint = NSLayoutConstraint(item: capturePreview, attribute: .top, relatedBy: .equal, toItem: cameraView, attribute: .top, multiplier: 1.0, constant: 0.0)
let bottomConstraint = NSLayoutConstraint(item: capturePreview, attribute: .bottom, relatedBy: .equal, toItem: cameraView, attribute: .bottom, multiplier: 1.0, constant: 0.0)
let leftConstraint = NSLayoutConstraint(item: capturePreview, attribute: .left, relatedBy: .equal, toItem: cameraView, attribute: .left, multiplier: 1.0, constant: 0.0)
let rightConstraint = NSLayoutConstraint(item: capturePreview, attribute: .right, relatedBy: .equal, toItem: cameraView, attribute: .right, multiplier: 1.0, constant: 0.0)
NSLayoutConstraint.activate([topConstraint, bottomConstraint, leftConstraint, rightConstraint])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2014-01-12
    • 2021-09-14
    • 1970-01-01
    • 2014-12-16
    • 2020-02-19
    • 2022-11-27
    相关资源
    最近更新 更多