-3

ナビゲーションバーにボタンがあるアプリケーションがあります。それをクリックすると、self.view にサブビューを追加する必要があります。

DemoViewController *demoViewController1 = [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 
    CGRect frame=demoViewController1.view.frame;
    frame.origin.y = -300;
     [self.view addSubview:demoViewController1.view];
    [UIView animateWithDuration:0.5
                     animations:^{
                         CGRect frame1 = frame;
                         frame1.origin.y = 0;
                         demoViewController1.view.frame = frame1;
                     }];

追加ビュー(別のView Controllerのもの)のフレーム原点yを負の値に設定し、クリックして0にすることで試みましたが、そのドロップダウン効果はありません。

ドロップダウンビューのようなアニメーションでビューを追加する必要があります。ボタンをもう一度押すと、このように削除する必要があります。

誰でもこれについて私を助けることができますか?

4

3 に答える 3

2

画面上にないフレーム (負の y 座標など) を持つサブビューとしてビューを追加し、アニメーション化されたフレームを変更します。

MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(50, -200, 200, 200)];
[self.view addSubview:myView];
[UIView animateWithDuration:0.3
                 animations:^{
                     CGRect frame = myView.frame;
                     frame.origin.y = 0;
                     myView.frame = frame;
                 }];

そして、削除するためのコード:

[UIView animateWithDuration:0.3
                 animations:^{
                     CGRect frame = myView.frame;
                     frame.origin.y = -1 * frame.size.height;
                     myView.frame = frame;
                 }
                 completion:^(BOOL finished) {
                     [myView removeFromSuperview];
                 }];

編集:

コードを次のように置き換えます。

DemoViewController *demoViewController1 = [[DemoViewController alloc] initWithNibName:@"DemoViewController" bundle:nil]; 
    CGRect frame=demoViewController1.view.frame;
    frame.origin.y = -300;
    demoViewController1.view.frame = frame; // You forgot this line
     [self.view addSubview:demoViewController1.view];
    [UIView animateWithDuration:0.5
                     animations:^{
                         CGRect frame1 = demoViewController1.view.frame;
                         frame1.origin.y = 0;
                         demoViewController1.view.frame = frame1;
                     }];
于 2013-06-18T13:12:09.203 に答える