8

スライドメニューを実装しましたが、Facebookとまったく同じスライド効果が欲しいです。私はstackoverflowに関する次の投稿に出くわしました:

ObjectiveCを使用したiphonefacebookサイドメニュー

greenisus(15回まで投票)によって与えられたソリューションを実装したいのですが、それを実装するのに問題があります。ボットは彼の回答に対するコメントで同じ問題を提起しました。「@greenisusメニューをどのように後ろに送ったのか混乱していますか?そうすると、黒いサイドメニューが表示されるだけです。」答えられていません。

参考のために彼の答えのテキストは次のとおりです。

とても簡単です。まず、表示されているビューコントローラーの下にあるビューコントローラーを作成する必要があります。このビューを次のように背面に送信できます。

[self.view sendSubviewToBack:menuViewController.view];

次に、ナビゲーションバーの左側にメニューボタンを配置し、次のようなハンドラーを記述します。

- (void)menuButtonPressed:(id)sender {
    CGRect destination = self.navigationController.view.frame;
    if (destination.origin.x > 0) {
        destination.origin.x = 0;
    } else {
        destination.origin.x += 254.5;
    }
    [UIView animateWithDuration:0.25 animations:^{
        self.navigationController.view.frame = destination;        
    } completion:^(BOOL finished) {
        self.view.userInteractionEnabled = !(destination.origin.x > 0);
    }];
}

それが一般的な考え方です。ビュー階層などを反映するようにコードを変更する必要がある場合があります。

次の方法をいつ使用する必要があるかを知りたいだけです。2番目の方法は単純で正常に機能しますが、その下にメニュービューが表示されません。

[self.view sendSubviewToBack:menuViewController.view];

上記のコードを正しく実行するためのいくつかのポインタまたは解決策を探しています。

4

1 に答える 1

2

実際、どうすればそれができるかを知っておく必要があります。menuViewController.viewをself.viewのsubViewとして追加するだけです。ただし、これはnavigationController.viewをカバーするため、[self.view sendSubviewToBack:menuViewController.view]を実行できます。また、menuViewControllerを表示/非表示にする必要がある場合は、メソッド-(void)menuButtonPressed:(id)senderを使用する必要があります。

HomeViewControllerの場合:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // be careful with the sequence of the code. If you firstly add the contentViewController and then add the 
    // menuViewController you need to [self.view sendSubviewToBack:self.menuViewController.view], else you don't
    // need to use sendSubviewToBack.
    self.menuViewController = [[MenuViewController alloc] init];
    self.contentViewController = [[ContentViewController alloc] init];
    [self.view addSubview:self.menuViewController.view];
    [self.view addSubview:self.contentViewController.view];
}

ContentViewControllerの場合:

- (IBAction)showMenu:(id)sender
{
    CGRect destination = self.view.frame;
    if (destination.origin.x > 0) {
        destination.origin.x = 0;
    } else {
        destination.origin.x += 254.5;
    }
    [UIView animateWithDuration:0.25 animations:^{
        self.view.frame = destination;        
    } completion:^(BOOL finished) {
        //self.view.userInteractionEnabled = !(destination.origin.x > 0);
    }];
}
于 2012-08-20T04:37:27.867 に答える