3

ページングが有効になっている UIScrollView がありますが、場合によっては、ユーザーが次のページにスワイプしたり、前のページに戻ったりできないようにしたいと考えています。

たとえば、誰かが 10 の質問 (ページごとに 1 つの質問) でテストに合格したとしても、その人が現在のページで質問に回答しない限り、スクロールは機能しません。

また、スワイプして前のページに戻るのを防ぐこともできます。したがって、基本的に、方向ロックを使用したり、ユーザーの操作を一時的に無効にしたりすることはできません。これは、リーダーが左にスワイプすることは許可されているが、右にスワイプすることは許可されていないためです。

コンテンツ オフセットをいじっている人が何人かいることに気付きましたが、アプリがコンテンツ オフセットを自動的に再調整するだけなので、ユーザーはまだスワイプできるので、その解決策は見苦しいと思います。ビューがコンテンツの最後に達したか、ユーザーの操作が無効になったかのようにしたいと思います。

コンテンツのサイズ/オフセットを「再生」して各ページで更新できると思いますが、あるページから別のページにジャンプできる「リンク」もあるため、適切に行う方法がわかりません(その時点で定義されたコンテンツの範囲外になる可能性があります)。

特定の方向へのスワイプがロックされているページにカスタムビューを使用しようとしましたが、ページに影響を与えずにスクロールビューがスワイプを検出するのを防ぐ方法が見つからなかったため、機能しません。スワイプは通常の方法で機能するはずです. そのカスタム ビューの ExclusiveTouch プロパティを YES に設定できることを確認し、すべてのイベントを取得するので、カスタム ジェスチャ レコグナイザーを介してスワイプを処理し、スワイプが許可されている場合はイベントを転送し、許可されていない場合は無視できると想定しました。ScrollView は常にスワイプ イベントをキャッチします。

私はあらゆる可能性を使い果たしたと感じており、同様のニーズを持つ人を見つけることができません.

だから私は疑問に思っています、これは可能ですか?はいの場合、悪いハックが必要ですか、それとも新しいカスタムスクロールビューを作成する必要がありますか?

どんな助け/アイデアも大歓迎です。

4

2 に答える 2

1

スクロール/ページングをロックするコード内の適切な場所で条件を使用し、scrollView オブジェクトの pagingEnabled または scrollEnabled を NO に設定します。

編集:

あなたの要件をもっと注意深く読むべきでした。ニーズに応じて、条件に基づいて複数のビューをスライドインおよびスライドアウトすることをお勧めします。それらをアニメーション化します。ジェスチャー認識機能も役立つはずです。そして、私はここで scrollView について話しているのではありません。View1 -> 条件 -> 合格? (ボタン アクションまたはジェスチャー) -> ビュー 2 へのアニメーションなど。

本当に scrollView を使用する必要がある場合は、contentSize を画面の幅に設定し、alwaysBounceHorizo​​ntal を NO に設定して、自動バウンス効果を防ぐことをお勧めします。

CGRect size = scrollView.contentSize;
size.width = CGRectGetWidth(scrollView.frame);
scrollView.contentSize = size;
scrollView.alwaysBounceHorizontal = NO;
于 2011-09-28T15:06:59.100 に答える
0

別の投稿で見つかりましたが、これが私が抱えていた同じ問題を解決した方法です。

これをView Controllerに入れ、UIScrollViewのデリゲートとして設定します

CGPoint oldOffset;  // instance variable

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    oldOffset = scrollView.contentOffset;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x < oldOffset.x) 
    {
        [scrollView setContentOffset:oldOffset];
    }
}
于 2013-05-07T00:36:48.633 に答える