1

iPhone Game Center アプリのように動作する引き出しを実装したいと思います。を引っ張るUITableViewと、テーブルの上部に到達すると、この引き出しスライドがあり、より多くのコンテンツが表示されます.

ここでいくつかの解決策を試しましたが、どれもうまくいきましたが、Game Center の例と同じ機能を再現することはできません。UITableView私は a の中に aを埋め込もうとしましたUIScrollView- このスクロール ビューには、ドロワーの役割を果たす 1 つのビューが上にあり、その下に tableView があります。大きな scrollView と tableView の両方をセットアップしUIScrollViewDelegate、両方の contentOffsets を同期することができました。大きなscrollViewのscrollBarsを無効にしたので、tableViewからのみscrollBarsを見ることができます。

次に、tableViewをビュー全体のサブビューとして設定し、別のビューを設定してみました.drawerビューを同じビューのサブビューとして設定し、再びUIScrollViewDelegatetableViewで遊んで両方のビューのフレームを調整しました。

どちらのソリューションもうまく機能しますが、私が探していたものではありません。両方のソリューションの最大の欠点は、tableView をプルしてドロワーを表示すると、ドラッグ プロセス全体でスクロール バーが同じ位置にあるため、tableView scrollView と対話していないことがはっきりとわかることです。ドロワーが完全に展開されると、tableView scrollView を操作できるようになりました (tableView コンテンツのスクロールと scrollBars が移動しています)。

添付の写真を見ると、引き出しが展開されたときに Game Center アプリのスクロールバーが動いていることがわかります。引き出しはtableViewのscrollViewの一部のようですが、完全に展開すると動きが止まり、このtableViewを引っ張り続けると、tableViewと引き出しの間にスペースが増えます。引き出しを非表示にするために tableView を上に押すと、scrollBar が下がります。

iPhone Game Center アプリのように動作する引き出しを実装したいと思います。を引っ張るUITableViewと、テーブルの上部に到達すると、この引き出しスライドがあり、より多くのコンテンツが表示されます.

このようなviewControllerをGame Centerで複製したいと思います。誰かがそれを行う方法を知っている場合は、解決策を共有してください。

ここでスクリーンショットを見ることができます:

http://i.stack.imgur.com/O44IS.png

http://i.stack.imgur.com/qDf7v.png

ありがとう

アダム

4

2 に答える 2

1

ViewControllerを実装する必要がUIScrollViewDelegateあり、メソッド内でscrollViewDidScrollいくつかの計算を行う必要があります。以下のコードは古いプロジェクトのものです。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat scrollOffset = scrollView.contentOffset.y; // this is the important number.
    if (scrollOffset>=0 && scrollOffset<=topHeight) {
        CGRect frame = CGRectMake(0, scrollOffset/2, 320, topHeight - scrollOffset/2);
        photos.frame = frame;
    } else if (scrollOffset>topHeight) {
        CGRect frame = CGRectMake(0, 100, 320, 100);
        photos.frame = frame;
    } else {
        CGRect frame = CGRectMake(0, 0, 320, topHeight);
        photos.frame = frame;
    }
}

あなたのフィードバックに基づいて、私は最良の選択肢は次のようなものだと思います:

|----------------------|  
|        DRAWER        |  
|----------------------|  
|                      |  
|                      |  
|                      |  
|     UIScrollView     |  
|                      |  
|                      |  
|                      |  
|----------------------|  

そして、内側scrollViewDidScrollはオフセットに基づいて引き出しのフレームを変更します。

于 2013-01-29T18:20:43.453 に答える
1

彼らがGame Centerアプリでそれをどのように行ったかを正確に見つけたと思います. 私のソリューションは同じように機能し、実装が非常に簡単です。

まず、UITableViewControllerサブクラスにUIView「blueView」というプロパティを追加し、プロパティをいくつか調整しtableViewました。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.blueView = [[UIView alloc] initWithFrame:CGRectMake(0.0, -100.0, 320.0, 100.0)];
    self.blueView.backgroundColor = [UIColor blueColor];

    [self.tableView addSubview:self.blueView];
    [self.tableView setContentInset:UIEdgeInsetsMake(100.0, 0.0, 0.0, 0.0)];
    [self.tableView setScrollIndicatorInsets:UIEdgeInsetsMake(100.0, 0.0, 0.0, 0.0)];

}

次に、- (void)scrollViewDidScroll:(UIScrollView *)scrollViewメソッドに従ってビューを調整しているscrollView.contentOffset.yため、常に上に表示されます。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{

    if (scrollView.contentOffset.y < -100) {
        self.blueView.frame = CGRectMake(0.0, scrollView.contentOffset.y, 320.0, 100.0);
    } else {
        self.blueView.frame = CGRectMake(0.0, -100.0, 320.0, 100.0);
    }
}

出来上がり!多分それは誰かの時間を節約するでしょう。

于 2013-01-30T13:25:12.833 に答える