0

アプリでシンプルな(Facebookのような)メニューを作成しようとしています。私はいくつかの質問を見つけました、それらのほとんどは答えを受け入れました、しかし通常答えは開発者によって行われたいくつかのプログラムを使うことです。

これらのプログラムは多くの場合、古いバージョンのxCode(ストーリーボードを使用しないもの)であり、ストーリーボードで実行されたものは複雑すぎてアプリに実装できませんでした。

だから私は次のような答えを持った1つの質問を見つけました:1。メニュービューコントローラー(私にとってはUITableViewController)を作成します2.最初のビューコントローラーでこのコントローラーを非表示にします:

MenuViewController *menView = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];

    [self.view sendSubviewToBack:menView.view];

3ボタンを作成し(後でジェスチャをパンする可能性があります)、そのメソッドで次のようにします。

-(IBAction)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);
     }];


}

これは、基本的にビューを固定長で右に移動するということです。あなたがsendToBack(UITableView)を公開し、相互作用できるようにする必要があると思います。ただし、私にとっては、上面図を右に移動し、空白の黒い画面を残しておくだけです。

今、私の問題はmenuViewのインスタンス化が悪いか、このガイドを間違って理解したことだと思います。

誰かがこれに対処する方法を知っているなら、私は答えに非常に感謝するでしょう。おそらく、すでに作成されているアプリがいくつかあります。これは、これと同じくらい簡単に理解でき、できれば私のコードに実装するのも簡単です:)

ありがとう!

4

1 に答える 1

1

これは、ストーリーボードのコンテナビューを使用して行います。左側のサイズを好きなように変更してから、右側のサイズをその横に追加し、インスペクターで幅を320に変更します。ほとんどのサイズが画面の右側に表示され、埋め込まれたコントローラーのサイズが次のように変更されます。フルスクリーンサイズである。左側のコンテナビューで取得したViewControllerを削除してから、Table View Controllerをドラッグして、左側のビューから埋め込みセグエに接続できます(コンテナビューからドラッグを制御する場合は、これが唯一の選択肢になります) 。2つのスワイプジェスチャレコグナイザー(1つは左と1つは右)をメインコントローラーのビューに追加し、それらをメインコントローラーの2つのメソッドに接続しました。次に、メインコントローラーの.hに次のコードがあります。

@interface ViewController : UIViewController

@property (weak,nonatomic) IBOutlet UIView *rightView;
@property (assign,nonatomic) CGRect rightRect;

@end

そして、.mでは、これだけです:

@implementation ViewController

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.rightRect = self.rightView.frame;
}


-(IBAction)revealSidebar:(id)sender {
    [UIView animateWithDuration:.3 animations:^{
        self.rightView.frame = self.view.window.frame;
    }];
}

-(IBAction)hideSidebar:(id)sender {
    [UIView animateWithDuration:.3 animations:^{
        self.rightView.frame = self.rightRect;
    }];
}
@end
于 2012-11-22T16:35:10.960 に答える