3

私の質問は: 私のアプリでは、このようなものを使用して実現したいUIScrollView

ここに画像の説明を入力

彼のUIScrollViewすべての内容が中に入っています。しかし、画面の上部 (または画面の下部) に到達したときに、AppStore (iOS 6) のようなコンテンツを固定したいと考えています。

ここに画像の説明を入力

この場合、「詳細」、「レビュー」、および「関連」ボタンはスクロールを停止し、上部に固定されたままになります。

誰でもどうすればよいか考えていますか?

4

2 に答える 2

8

スクロールビューにデリゲートがない場合は、デリゲートを指定します。これはおそらくビューコントローラになります。

また、デリゲートにフローティングビューへの参照を提供します。(この例では、フローティングビューには「Dettagli」、「Recensioni」、および「Correlati」ボタンが含まれ、フローティングビューは三角形のノッチがある場所で透明であり、シャドウもフローティングビューの一部です。)フローティングビューは、スクロールビューのサブビューである必要があります。

フローティングビューのフレームの「通常の」Y座標をインスタンス変数に保存します。たとえば、デリゲートがView Controllerである場合は、おそらく次の場所で実行する必要がありますviewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    originalFloatingViewY = floatingView.frame.origin.y;
}

デリゲートのscrollViewDidScroll:方法で、スクロールビューがフローティングビューの「通常の」位置の上部より下にスクロールされているかどうかを確認します。その場合は、フローティングビューを表示領域の上端に移動します。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [self updateFloatingViewFrame];
}

- (void)updateFloatingViewFrame {
    CGPoint contentOffset = scrollView.contentOffset;

    // The floating view should be at its original position or at top of
    // the visible area, whichever is lower.
    CGFloat y = MAX(contentOffset.y, originalFloatingViewY);

    CGRect frame = floatingView.frame;
    if (y != frame.origin.y) {
        frame.origin.y = y;
        floatingView.frame = frame;
    }
}

サブクラス化UIScrollViewしてオーバーライドすることによってもそれを行うことができますlayoutSubviewsこの手法の詳細については、 WWDC2011の「AdvancedScrollViewTechniques」ビデオをご覧ください。

于 2012-10-23T08:39:24.037 に答える
0

UIScrollView'sこれは、スクロールのためにデリゲート メソッド ( scrollViewDidScroll:) で処理する必要があります。yがその特定の値に達したら、scrollviewこの方向のスクロールのみを無効にする必要があります。そこにif条件を追加して、yスクロール中にポイントをチェックしてリセットするだけです。このためには、この特定の部分を下のコンテンツの外側の別のスクロール ビューとして保持し、下のスクロール ビューの上方向の動きに合わせて移動する必要がある場合があります。

于 2012-10-23T08:10:33.943 に答える