2012-05-15 7 views
5

私はいくつかのサブビューを含むビューを折りたたむためのアニメーションを作ろうとしています。iOSサブビューを含むビューをアニメ化する

[UIView beginAnimations:@"advancedAnimations" context:nil]; 
[UIView setAnimationDuration:3.0]; 

CGRect aFrame = aView.frame; 
aView.size.height = 0; 
aView.frame = aFrame; 

[UIView commitAnimations]; 

このアニメーションは正常ですが、aViewのみです。サブビューは期待どおりに折りたたまれません。 サブビューを崩壊させるにはどうしたらいいですか?さらに、折りたたんで元のサイズを再計算する方法はありますか?

THX

答えて

5

おそらくあなたのサブビューにいくつかの自動サイズ変更マスクを適用することを忘れているかもしれません。する場合

for (UIView *subview in aView.subviews) { 
    subview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin); 
} 

それは動作するはずです。

しかし、 lamelasああそんなに立派だ

aView.transform = CGAffineTransformMakeScale(1.0,0.0); 
+0

まだ良いですが、私がしたいことは、ビューが小さくなるにつれてそのコンテンツを隠すことです。 CGAffineTransformMakeScaleは、コンテンツ全体を拡大/縮小します。ところで、変換で0.0を使うことはできません。 – toppless

+0

変換で0.0を使用できないことは、どこから分かりましたか?とにかく、私はあなたの質問が何であるかは分かりません...あなたのサブビューを拡大したいのですか、またはアニメーションが発生するときにそれらを切り取りたいのですか? – Zoleas

+0

0.0に設定し、アニメーションがどのように見えるかを見て、それを0.001に設定することと比較してみてください。私はサブビューのサイズを変更しないようにしていますが、メインビューが小さくなるにつれて「スライドドア」効果を持たせるようにしています。 – toppless

4

がアニメーション化するためにこれを使用してみてください:

aView.transform = CGAffineTransformMakeScale(1.0,0.0); 
+0

+1言ったように、個人的に私は、使用します。 – Caleb

+0

よりうまく動作しますが、アニメーションがちょっと変わっています - ビューを中点に「絞る」ようにします。 – toppless

0

推測:

[UIView beginAnimations:@"advancedAnimations" context:nil]; 
[UIView setAnimationDuration:3.0]; 

CGRect aFrame = aView.frame; 
aView.size.height = 0; 
aView.frame = aFrame; 

for (UIView *subview in aView.subviews) { 
    CGRect frame = subview.frame; 
    frame.size.height = 0; 
    subview.frame = frame; 
} 

[UIView commitAnimations]; 

さらに、崩壊した後、元のサイズを再計算する方法はありますか?

おそらく、折りたたむ前に高さを保存するだけです。

関連する問題