Kir*_*ran 4 iphone ipod uiview avcapturesession ios5
环境:Xcode 4,ios 5,ipod touch第4代带视网膜显示屏
我正在尝试编写一个简单的应用程序,显示视频预览并捕获照片.为了显示预览,我使用以下代码:
// Create the session
session = [[AVCaptureSession alloc] init];
// Set preset to the highest available
session.sessionPreset = AVCaptureSessionPresetPhoto;
// Give the frame for preview
CALayer *viewLayer = self.vPreview.layer;
NSLog(@"viewLayer = %@", viewLayer);
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer =
[[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.frame = self.vPreview.bounds;
NSLog(@"Bounds: x:%d, y:%d,height:%d,width:%d",
self.vPreview.bounds.origin.x,self.vPreview.bounds.origin.y,
self.vPreview.bounds.size.height, self.vPreview.bounds.size.width);
[self.vPreview.layer addSublayer:captureVideoPreviewLayer];
// Get AV Device
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
// Add Input from the above device
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if ( !input ) NSLog(@"ERROR: trying to open camera: %@", error);
[session addInput:input];
Run Code Online (Sandbox Code Playgroud)
我将vPreview连接到IB故事板上的UIView,它占据了全屏.但是,帧始终打印为0,0,0,0(x,y,h,w).有人可以告诉我出了什么问题吗?
几行代码可以设置输出并运行会话.但是,到目前为止,框架已经错了.有趣的是,我可以看到视频预览,但它以纵向显示,因为我的应用程序都是风景.
Cra*_*tis 10
你用什么方法打印框架?很可能UIView
在您正在进行打印的代码中没有创建任何一个,或者至少它没有被系统自动调整大小.
一旦实际视图出现在屏幕上,我建议用另一种方法检查框架,就像在 viewDidAppear:
- (void)viewDidAppear {
NSLog(@"View frame is: %@", NSStringFromCGRect(self.vPreview.frame));
[super viewDidAppear];
}
Run Code Online (Sandbox Code Playgroud)
另请注意,使用NSStringFromXXX
方法打印基本结构的值要比单独访问值要容易得多.
很可能在init
从 NIB 文件实际加载视图之前,此代码在方法中运行。所以当你调用self.vPreview.bounds
,self.vPreview
实际上是 nil 时,给出一个零 CGRect 返回值。
使用 UIViewController 时,视图会延迟加载,因此在请求视图属性之前,笔尖尚未加载。
您应该在-viewDidLoad
方法中进行视图自定义。加载笔尖后调用此方法,并且所有连接的 IBOutlets 都将不为零。
归档时间: |
|
查看次数: |
6423 次 |
最近记录: |