2013-05-26 107 views
1

我正在爲包含11個子視圖(7個按鈕,2個標籤,2個圖像視圖)的uiview(父視圖名爲'popupVw')設置動畫。最初幀的大小是:使用不改變子視圖框架大小的動畫更改uiview的框架大小

CGRect Frame = CGRectMake(10, 10 ,320, 0); 

&新的幀尺寸是:

CGRect newFrame = CGRectMake(10, 10 ,320, 300); 



[UIView animateWithDuration:0.5 
       animations:^{popupVw.frame = newFrame;} 
       completion:^(BOOL finished){ 
        // do stuff here after animation finished 
       }]; 

所以基本上我改變的視圖的高度爲0〜300。 &然後再從300變爲0。實現show hide動畫。

把它看作屏幕中間的一個彈出窗口,顯示從0到300的高度。此彈出窗口包含子視圖&右上角的關閉按鈕。通過點擊這個關閉按鈕,彈出窗口再次降低到300到0的高度。父彈出視圖正確地顯示動畫。但子視圖在高度增加到最大之前是可見的。 &直到父視圖的高度再次變爲0。所以基本上只有父視圖是動畫&而不是內部視圖。

該動畫在父視圖上正常工作,但子視圖不與父視圖一起動畫。因此,當我將uiview的高度從300更改爲0時,所有子視圖仍然可見&只有父級uiview的高度變爲0.

我是否需要爲它們單獨放置動畫?如果是的話,我怎麼能做到這一點的高度變化?或者還有其他方法可以用來達到相同的效果嗎?

我試過自動調整掩碼。但它不是爲我工作:

pointerImgVw.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin ; 

下面是問題的srceengrabs:

enter image description here enter image description here enter image description here

在右上角的十字按鈕是動畫彈出的子視圖。我想要的是十字按鈕不應該超出動畫視圖。例如在第二張屏幕截圖中,只有半交叉按鈕應該可見。外側部分不應該可見

+0

嘗試UIViewAutoresizingFlexibleHeight代替。 –

+0

@verbumdei我試過使用UIViewAutoresizingFlexibleHeight,但它只是增加了與父視圖大小的子視圖的高度。我的意思是 。如果parentView的高度從0增加到300,那麼子視圖的高度也在增加。 – stackNeverFlow

+0

你想如何讓子視圖動畫?或者只是設置clipToBounds? –

回答

8

設置clipsToBounds父視圖的屬性YES

即parentView.clipsToBounds = YES

1

請嘗試使用options:UIViewAnimationOptionLayoutSubviews。編輯: 好的,明白了。然後你需要在你的動畫視圖中有另一個視圖(讓它稱爲coverView)。 coverView將與動畫視圖的大小相同,並且將位於所有其他子視圖的頂部,因此它會隱藏它們。現在,當您打開視圖的動畫時,您應該使coverView消失,反之亦然。

+0

不,我不能這樣做,因爲我的主父框架位於屏幕中間,並開始從屏幕中間顯示。沒有其他觀點可以隱藏這個動畫視圖。您建議使用滑動/滑出動畫,其中框架的高度保持不變 – stackNeverFlow

+0

請您附上視圖如何打開和關閉的截圖嗎?我們會幫助您更輕鬆地找到解決方案。 –

+0

嗨@Eli Ganem,加入了屏幕截圖。 – stackNeverFlow

相關問題