Raf*_*fer 63 iphone avfoundation ios4
AVCaptureVideoPreviewLayer *avLayer =
[AVCaptureVideoPreviewLayer layerWithSession:session];
avLayer.frame = self.view.frame;
[self.view.layer addSublayer:avLayer];
Run Code Online (Sandbox Code Playgroud)
我使用AVCaptureVideoPreviewLayer在视图上显示视频.但视频的视图并没有填满整个iPhone4的屏幕.(右侧和左侧有两个灰色条)
我希望视频能够全屏显示.我怎么处理它?非常感谢你!
fli*_*ald 186
也许这解决了吗?
CGRect bounds=view.layer.bounds;
avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
avLayer.bounds=bounds;
avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
Run Code Online (Sandbox Code Playgroud)
mar*_*rko 13
混淆的一个潜在原因是,它AVCaptureVideoPreviewLayer
是CoreAnimation层,并且在上面的所有答案中,相对于视图静态地定位(例如,没有约束).如果使用约束来布局视图,则这些不会自动调整预览图层的大小.
这意味着您无法设置预览图层,viewDidLoad
因为布局尚未发生,预览图层将在Interface Builder中调整大小.
相反,覆盖viewDidLayoutSubviews
你的ViewController
并在那里定位预览图层.
- (void)viewDidLayoutSubviews
{
CGRect bounds=view.layer.bounds;
avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
avLayer.bounds=bounds;
avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
}
Run Code Online (Sandbox Code Playgroud)
esc*_*ter 11
@ fitzwald的答案将为您提供所需的结果,但有一种更简单的方法.发生的事情是会话预设默认为视频 - 高(与屏幕的宽高比不匹配).使用Photo预设可以实现全屏预览(如在Camera.app中).简单的设置
session.sessionPreset = AVCaptureSessionPresetPhoto;
Run Code Online (Sandbox Code Playgroud)
在开始你的会议之前.如果您想了解更多信息,请参阅Apple文档.
为了谷歌的缘故,这是公认的答案,但使用的Swift略有不同:
var bounds:CGRect = self.view.layer.bounds
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer?.bounds = bounds
previewLayer?.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32151 次 |
最近记录: |