2011-12-06 24 views
0

私は比較的新しいIOS開発です。 UIViewアニメーションに関するクエリがあります。 私のアプリケーションでは、私は3つのビュー、ヘッダービュー、view2とフッタービューで構成される "View1"と言うビューを持っています。 3つのビューの幅は同じです(view1と同じ)。ヘッダービューとフッタービューの高さは固定されており、View2の高さはView1の高さによって異なります。したがって、View2の高さはView1の高さ(ヘッダービューの高さ+フッタービューの高さ)として計算されます。 3つのサブビューそれぞれの自動サイズ設定はnoneに設定されます。したがって、View1のすべてのサブビューのすべての配置項目は、そのlayoutSubviewsメソッドで行われます。サブビューとのUIViewアニメーションの同期

------------------------- 
    |  Header View  | 
    |      | 
    ------------------------- 
    |      | 
    |      | 
    |  View2   | 
    |      | 
    ------------------------- 
    | Footer View  | 
    |      | 
    ------------------------- 

       View1 

を次のようにView1を、現在のレイアウトが見える今、私が何をしたいユーザーはフッターのビューをタップしたときにVIEW2の大きさがゼロになるとフッターのビューは、単にヘッダビューの下に位置しているので、VIEW1がアニメーションで崩壊すべきです。以下のようにアニメーション後VIEW1の現在のレイアウトが結果の上に実現するために

  ------------------------- 
      | Header View  | 
      |      | 
      ------------------------- 
      | Footer View  | 
      |      | 
      ------------------------- 

      View1 (After Animation) 

になります私はView1を

実行に関する
CGFloat headerViewHeight = self.view1.headerView.frame.size.height; 
    CGFloat footerViewHeight = self.view1.footerView.frame.size.height; 
    CGFloat newHeight = (headerViewHeight + footerViewHeight); 
    CGRect frame = self.view1.frame; 
    frame.size.height = newHeight; 

    [UIView beginAnimation:nil context:NULL]; 
    [UIView setAnimationDuration:3.0f]; 

    self.view1.frame = frame; 

    [UIView commitAnimation]; 

の親ビューにフッタービュー上でタップジェスチャーのハンドラメソッドに次のコードを書きました画面上では、View2の高さは0に設定され、フッタービューはすぐにヘッダービューのすぐ下に配置され、View1の高さはアニメーションでゆっくりとアニメーションとともにnewHeightに減少します。これは望ましい結果ではありません。私が望むのは、View1の高さがアニメーションとともに減少し、View2の高さも同じ量でアニメーションで減少し、フッタービューはアニメーションで同じ量で上方向に移動する必要があります。 。

私は上記の結果をどのように達成することができますか?

+0

なぜあなたのアニメーションの一部としてview2の高さを設定しないのですか? – Kjuly

答えて

1

以下は、私に適したスニペットです。それはあなたにいくつかのアイデアを与えることを望みます。

@implementation MasterView 
{ 
    UIView *headerView; 
    UIView *view2; 
    UIView *footerView; 
    bool collapsed; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.backgroundColor = [UIColor yellowColor]; 

     headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)]; 
     headerView.backgroundColor = [UIColor redColor]; 

     view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 50, 320, 100)]; 
     view2.backgroundColor = [UIColor greenColor]; 

     footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 150, 320, 100)]; 
     footerView.backgroundColor = [UIColor blueColor]; 
     footerView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; 

     UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggle:)]; 
     [footerView addGestureRecognizer:tapGesture]; 
    } 
    return self; 
} 

- (void)toggle:(UITapGestureRecognizer *)recognizer 
{ 
    [UIView animateWithDuration:1.0 animations:^{ 
     CGRect view2Frame = view2.frame; 
     view2Frame.size.height = 0; 
     view2.frame = view2Frame; 

     CGRect selfFrame = self.frame; 
     selfFrame.size.height -= 100; 
     self.frame = selfFrame; 
    }]; 
} 

-(void)layoutSubviews 
{ 
    [self addSubview:headerView]; 
    [self addSubview:view2]; 
    [self addSubview:footerView]; 
} 
+0

あなた自身で新しいプロジェクトを作成したようです。 :p – Kjuly

+0

それは私のために働いてskywingありがとう:) – Mousam

関連する問題