2

Vine アプリが使用する種類のドロップダウン テーブルビューをどのようにプログラミングするのだろうと思っています。Vine を使用したことがない場合は、私が話している UI デザインを示す下の図を提供します。基本的に、左側の UIBarButton を押すと、このテーブルビューがドロップダウンします。もう一度どこかをタッチすると、もう少し (5 または 10 ピクセル) ドロップダウンし、素敵なアニメーションで画面を離れます。

これを実装する方法についてのフィードバックを探しています。前もって感謝します。

ここに画像の説明を入力

4

3 に答える 3

4

それについて行く方法がわからないUITableView

おそらく、Github で利用可能な REMenuを使用してインスピレーションを得たり、フォークしてニーズに合わせてカスタマイズしたりできます。

于 2013-07-17T02:35:39.773 に答える
0

REMenu は、可能な限り正確なコピーに近いものです。メニューが下にスライドしたときにメニューの上部がクリッピングされていないことに気付きました.ステータス/ナビゲーションバーの下にスライドしましたが、私には正しく見えませんでした. スライド ロジック (および「8」という印象的な SE の評判) を確認していないので、メニューを表示する方法を簡単に説明します。

  1. メニューのコンテンツのビューを作成する (テーブル ビューなど)
  2. 高さゼロに折りたたまれた囲んでいるメニューに配置し、折りたたまれたメニュー ビューの上部からコンテンツを突き出します。
  3. メニューの上部が表示されないようにコンテンツをクリップするようにメニュー ビューを設定してから、メニューの高さを大きくアニメーション化すると、コンテンツを下にアニメーション化します。

このサンプルでは、​​メニューのコンテンツに単純なグラデーションを使用しています。

@interface BackgroundLayer : NSObject

+(CAGradientLayer*) redBlueGradient;

@end


@implementation BackgroundLayer

+ (CAGradientLayer*) redBlueGradient
{
    CAGradientLayer *headerLayer = [CAGradientLayer layer];
    headerLayer.colors =
    @[(id) [UIColor redColor].CGColor, (id) [UIColor blueColor].CGColor];
    headerLayer.locations = nil;

    return headerLayer;
}

@end



@interface ViewController ()

@property (nonatomic, strong) UIButton* doIt;
@property (nonatomic, strong) UIView* menu;
@property (nonatomic, strong) UIView* nestedView;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // create simple toggle button to test the menu
    self.doIt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    self.doIt.frame = CGRectMake(50, 50, 50, 44);
    [self.doIt setTitle:@"Doit!" forState:UIControlStateNormal];
    [self.doIt sizeToFit];
    [self.doIt addTarget:self action:@selector(doIt:)
        forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.doIt];

    // menu
    self.menu = [[UIView alloc] initWithFrame:CGRectMake(20, 200, 280, 0)];
    self.menu.layer.borderColor = [UIColor blackColor].CGColor;
    self.menu.layer.borderWidth = 3.0;
    self.menu.clipsToBounds = YES;

    // menu contents
    self.nestedView = [[UIView alloc] initWithFrame:CGRectMake(0, -100, 280, 100)];
    CAGradientLayer *background = [BackgroundLayer redBlueGradient];
    background.frame = self.nestedView.bounds;
    [self.nestedView.layer addSublayer:background];
    [self.nestedView clipsToBounds];
    [self.menu addSubview:self.nestedView];

    [self.view addSubview:self.menu];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction) doIt:(id) sender
{
    if (!CGRectEqualToRect(self.nestedView.frame, CGRectMake(0, 0, 280, 100)))
    {
        [UIView animateWithDuration:0.15 animations:^{
            self.menu.frame = CGRectMake(20, 200, 280, 100);
            self.nestedView.frame = CGRectMake(0, 0, 280, 100);
        }];
    }

    else
    {
        [UIView animateWithDuration:0.15 animations:^{
            self.menu.frame = CGRectMake(20, 200, 280, 0);
            self.nestedView.frame = CGRectMake(0, -100, 280, 100);
        }];
    }

}


@end

乾杯。

于 2013-10-25T05:17:26.657 に答える
0

REMenu の問題は、ユーザーが特定のセクションをタップするたびに viewControllers を作成することですが、これは当てはまりません。そこに接続されている各画面の状態を保持する必要があります。

于 2014-02-26T04:00:05.407 に答える