3

UIViewの上にオーバーレイがありUITableviewます。をスクロールするとき、Facebookアプリのトップメニューと同じように、オーバーレイをスクロールと同じ速度で移動させUITableviewたい です。UIViewUITableview

ここに画像の説明を入力してください

助言がありますか?uitableviewのスクロールデリゲートでオーバーレイuiviewのフレームを変更しようとしています。次のようなものです。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    self.lastOffsetY = scrollView.contentOffset.y;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offset = self.lastOffsetOfY - scrollView.contentOffset.y;
    CGRect frame = self.overlayview.frame;
    frame.origin.y += offset;
    self.overlayview.frame = frame;
    self.lastOffsetOfY = scrollView.contentOffset.y;
}

contentoffset値の変更を使用するだけです。ただし、オーバーレイuiviewは、uitableviewスクロールと同じようには移動しません。

4

2 に答える 2

2

そのUIViewを常に画面の上部に固定したい場合は、テーブルビューとは関係なく、UIViewをテーブルビューに追加するのではなく、コントローラーのビューに追加するだけです。

あなたのXIBで、あなたがそれを使用しているなら、あなたは次のようなものを持つべきです

VIEW
    UITableView
    UIView

おそらく持っているものの代わりに:

VIEW
    UITableView
        UIView
于 2013-01-18T19:10:54.093 に答える
1

Facebook アプリと同様のオーバーレイを実現しようとしている場合は、UITableView/ScollView を格納するスーパービューにオーバーレイを追加する方が効率的です。こうすれば、ユーザーがスクロールするたびに実行する必要のある大量のコードを記述する必要がなくなります。

//in your View Controller:
UITableView *table = [[[UITableview alloc] init] autorelease];
CGRect frame = CGRectMake (tableOriginX, tableOriginY, width, height);
UIView *overlay = [[[UIView alloc] initWithDesieredFrame: frame] autorelease];

この方法では、ビューは決して移動しませんが、TableView の上部に常に存在するという錯覚を与えます。Facebook のように、ビューを閉じたい場合は、TableView の内部ジェスチャ認識機能を使用して、オーバーレイを閉じるか呼び出すフリック (Facebook など) を検出できます。

//Something like:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
if (velocity.y > 0)
{
    [self hideButtonPannelData];
}
if (velocity.y  < -0.8)
{
    [self revealButtonPannelData];
}
于 2013-03-27T18:12:36.063 に答える