2014-03-25 51 views
0

我一個觀點,即應該從底部如何添加視圖(和收縮或伸展等)的iOS

Two screen, view pop in and hide

此視圖(在下面的屏幕截圖示出)彈出中,和動畫應該隱藏和彈出中(屏幕5-> 6隱藏)(屏幕6-> 5彈出)。

view in question

你可以看到一個UIWebView(文本視圖是一個UIWebView),必須縮小並適當拉長。

我不知道什麼是正確的方法來做到這一點。我應該創建320pt x 0pt視圖(這將隱藏,因爲它沒有高度),然後動畫它的「高度」屬性,並更新高度約束?或者我應該採取不同的方法?

我使用故事板系統。

非常感謝您的時間和回答

+0

動畫高度是一個很好的解決方案。 – tarmes

+0

@tarmes 1.故事板設計視圖(如第5屏)2.使視圖高度爲0pt。 3.這個視圖的動畫高度屬性? –

回答

1

1)設計你的屏幕就像鑑於5

2)設置了彈出視圖的「打開」高度的限制。上面的視圖的底部需要連接到彈出視圖的頂部,並且頂部視圖顯然不應具有固定的高度。

3)創建了高度約束

4)在windowDidLoad的直銷店通過獲取它從約束(這樣你就不必在代碼分開維護它的「打開」的高度)。例如(其中_popUpHeight是CGFloat的成員變量):在需要時

- (void)viewDidLoad 
{ 
    _popUpHeight = _popUpHeightConstraint.constant; 
} 

5)動畫的約束。這樣的事情:

- (IBAction)togglePopup:(id)sender { 

    [UIView animateWithDuration:5 
     animations:^{ 
         _addBannerDistanceFromBottomConstraint.constant = (_popupState) ? 0 : _popUpHeight; 
       }]; 

    _popupState = !_popupState; 
} 
+0

你的意思是「viewDidLoad」? –

+0

NSAnimationContext僅適用於Mac OS ...我想。 –

+0

糟糕 - 我只是從我當前的項目中攫取了一大塊代碼,卻沒有想到。我已經更新了安裝程序 – tarmes

0

試試這個代碼:

[UIView animateWithDuration:duration 
         delay:delay 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^(void) { 
        viewToChange.frame = CGRectMake(x, y, width, height); 
       } 
       completion:NULL]; 

您將需要viewToChange的出口。

+0

這不適用於自動佈局。 – tarmes

+0

它適用於我,我只是不使用約束。 – Churchill

+0

當然 - 但放棄自動佈局是一個很大的代價,現在它已經成熟了。 – tarmes

相關問題