2014-09-22 96 views
0

我有一个视图,使用AVCaptureVideoPreviewLayer来呈现设备的摄像头馈送。我计划这个视图将填充设备的屏幕并在顶部和底部留出一些空间。自动布局固有内容大小以填充屏幕

Q1是否有意义了我的看法,以实现intrinsicContentSize和有此提供的尺寸时,它被标定,因此它只是适合屏幕它会是什么?或者我误解了自动布局和intrinsicContentSize

Q2intrinsicContentSizeUIView子类实现可以利用[[self window] screen]?如果布局系统在视图连接到屏幕后询问视图调用intrinsicContentSize,这将起作用。如果在此点之前发生呼叫,视图将不会知道它将要连接的屏幕,并且这将失败。

回答

0

最后我没有使用intrinsicContentSize。看起来更简单也更灵活,以允许CameraView在我的故事板中控制其大小。

CameraView,一个UIView子类有一个aspectRatioConstraint属性,它建立和更新其updateConstraints覆盖:

-(void) updateConstraints 
{ 
    if(!_aspectRatioConstraint) 
    { 
    const CGSize videoSize = [self videoSize]; 
    NSLayoutConstraint *const aspectConstraint = 
    [NSLayoutConstraint constraintWithItem: self 
           attribute: NSLayoutAttributeWidth 
           relatedBy: NSLayoutRelationEqual 
            toItem: self 
           attribute: NSLayoutAttributeHeight 
           multiplier: videoSize.height/videoSize.width 
            constant: 0]; 
    [self setAspectRatioConstraint: aspectConstraint]; 
    [self addConstraint: aspectConstraint]; 
    } 

    [super updateConstraints]; 
} 

(约束的比率由回 [self videoSize]什么相机设备报告确定)

在故事板中,我还在相机的视图上设置了宽高比约束,但我检查约束上的placeholder选项,以便在构建时将其删除。我将其设置为4:3,这可能与真实相机可能相同或不同 - 它只是在视图布局过程中给我提供了正确的框架。

我使CameraView通过在故事板中设置其宽度约束来填满屏幕。

相关问题