2014-09-22 101 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通過在故事板中設置其寬度約束來填滿屏幕。

相關問題