TabBarControllerベースのアプリケーションでビューをタッチしたときにフルスクリーンにリサイズする方法は?

tabBarController navigationBarController viewController imageView など、いくつかのビューコントローラがあります。
階層は: tabBarController はルートコントローラで、 navigationBarController を含みます。そして viewController imageView を含む))が navigationBarController によってプッシュされます。

So the question is, when I touched the imageView, how to resize it to fullscreen with smooth animation. Note, I don't want to hide NavigationBar & TabBar.
I tried it by setFrame, however, it is covered by navigationBarController and tabBarController.
I tried presentModalViewController: but it lose continuity.
I also tried to reset rootViewController to viewController, but the resulted with a broken animation. :(
Thanks for any suggestion!


テストコード

UIViewController * viewController = [[UIViewController alloc] init];
[viewController.view setFrame:CGRectMake(0.0f, 0.0, 320.0f, 480.0f)];
[viewController.view setBackgroundColor:[UIColor redColor]];

UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
[imageView setBackgroundColor:[UIColor yellowColor]];
[imageView setUserInteractionEnabled:YES];
[viewController.view addSubview:imageView];
[imageView release];

UINavigationController * navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[viewController release];

UIViewController * anotherTabViewController = [[UIViewController alloc] init];
[anotherTabViewController.view setFrame:CGRectMake(0.0f, 0.0, 320.0f, 480.0f)];
[anotherTabViewController.view setBackgroundColor:[UIColor blueColor]];

UITabBarController * tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController, anotherTabViewController, nil];
[navigationController release];
[anotherTabViewController release];

[self.window setRootViewController:tabBarController];

ここでは、テストのための簡単なコードを書いています。今タッチアクションは気にしないでください。 imageViewを完全にフルスクリーン(width:320、height:480)に設定する方法は不思議です。しかし、それはナビゲーションバーとタブバーでクリップされます。私はフレームがスーパービューに相対的であることを知っています。どのようにこの問題に対処するには?

1

1 答え

それをフルスクリーンにリサイズする必要があるときにあなたのウィンドウにimgを追加しようとする:

    UIImageView *img; //create new image
    img = yourImageView;
    [img setOrigin:CGPointMake(yourImageView.frame.origin.x, yourImageView.frame.origin.y+90)]; 
//window size is bigger, so to set an image frame visionary at same place, you need to set origin point lower
    MOEAppDelegate *sharedAppDelegate = (MOEAppDelegate *)[[UIApplication sharedApplication] delegate];
    [sharedAppDelegate.window addSubview:img];
    [UIView animateWithDuration:1 
                     animations:^{
                         [img setFrame:CGRectMake(0, 
                                                  0, 
                                                  320, 
                                                  480)];
                     }];

あなたのself.viewのフレームは、tabBarまたはnavigationBarを追加すると自動的にサイズが変更され、 - (void)viewDidLoadではサイズが変更されないことに注意してください。

2
追加された
あなたの画像はviewControllerのビューのサブビューではありませんか?これを試してください:[self.view addSubView:img];次に、フレームを設定します。注意、addSubViewは1回だけ必要です。
追加された 著者 SentineL,
いくつかのコードを投稿する必要があります。どこかに間違いがあります。あなたのviewControllerのビューにフレーム0、0、320、346がある場合、イメージはその中になければなりません。
追加された 著者 SentineL,
ああ...だから、あなたはタブバーの上にあり、ナビに画像が必要です。バー?私はちょうど早くそれを得ていない。
追加された 著者 SentineL,
編集された答え。それを試してみてください
追加された 著者 SentineL,
新しいイメージをアニメートする必要があります。古いものではなく、あなたのスクロールビューのものです。ところで、あなたのスクロールビューは新しい画像の "y"補正をかなり難しくします。それで、あなたは画像でスクロールビューを持っています。ユーザのタップ画像、画像がフルスクリーンになります。画像はすべてのコントロールを隠します。ユーザーはそれをもう一度タップし、それが小さくなり、制御が可能になります。ユーザーは今すぐアプリ内をナビゲートできます。右?
追加された 著者 SentineL,
ScrollView.contentOffsetを使用して画像の位置を計算する
追加された 著者 SentineL,
こんにちは@SentineL、あなたのリプレイのおかげで。しかし、私はそれを試した。ビューはナビゲーションコントローラによってプッシュされ、ナビゲーションバーでカバーされます。画像をフルスクリーンに設定すると、その最大フレームサイズはビューのサイズと同じになります。ビューのフレームを自動的にリサイズする設定ですか?私はそれがうまくいくかどうか分からない、私は試してみる。ありがとう。 :)
追加された 著者 Kjuly,
0、0、320、346 (NavigationBarの高さは90、TabBarの高さは44)の viewContrller のビューフレームを印刷します。
追加された 著者 Kjuly,
はい、それはviewController.viewのサブビューです。
追加された 著者 Kjuly,
私は上記のテストコードを貼り付けました。 :)
追加された 著者 Kjuly,
Y A!それが私が望むものです。厄介な問題.. :(
追加された 著者 Kjuly,
ありがとう@SentineLまあ、私はそれを試してみました。しかし、imageViewはviewControllerViewのサブビューではないので、viewControllerView(実際はscrollView)で遷移しません。アニメーションを行うときにサブビューを変更する必要がありますか?
追加された 著者 Kjuly,
はい、そうです!私はまだ試しています。古い画像のフレームデータを新しい画像に設定しようとしましたが、 [UIView animation ... ]でアニメーションを行います。しかし効果はそれほどうまくいかない。
追加された 著者 Kjuly,
あなたの時間を与えてくれてありがとう、私に試してみましょう。 :)
追加された 著者 Kjuly,