我试图在我的应用中显示自定义相机视图的视频预览,但目前预览非常偏离中心 - 使用前置相机时尤其明显。
我这样定位:
if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
previewLayer.bounds = scanningView.bounds
previewLayer.position = CGPointMake(CGRectGetMidX(scanningView.bounds), CGRectGetMidY(scanningView.bounds))
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
scanningView.layer.insertSublayer(previewLayer, atIndex: 0)
}
然而,预览的中心不在它所在的视图的中心。我怎样才能实现这一点?
答案 0 :(得分:0)
不确定您是否需要CGRectGetMidX / Y只是给预览图层一个等于托管视图的框架。
previewLayer.videoGravity = AVLayerVideoGravityResizeAspect
scanningView.layer.addSublayer(previewLayer)
另外,您使用自动布局?如果是这样,您可能需要在调用viewWillLayoutSubviews时调整框架
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
previewLayer.frame = scanningView.bounds
}
答案 1 :(得分:0)
使用自定义UIView并将其subLayer类分配给AVCaptureVideoPreviewLayer似乎更好,而不是添加图层和设置框架。请参阅示例here
class Menu extends React.Component {
render() {
return(
<div className="Menu">
<MenuItem icon={MdInbox} />
<MenuItem icon={MdDrafts} />
<MenuItem icon={MdTrash} />
</div>
);
}
}
我通过这种方式找到了解决方案。