1

UIScrollViewと約20個のアイテム(UIViewControllers)があります。各ページには、これらの20個のアイテム間を移動するのに役立つボタンもあります。したがって、最初のビューで18番目のアイテムに移動するボタンを押すと、スクロールビュー全体がそのビューにスクロールし、スクロール操作をアニメーション化するため、1番目から18番目のアイテムまでのすべてのビューを表示できます。

この長いアニメーションなしで、スクロールビューで1番目から18番目のアイテムにジャンプすることは可能ですか(2つの隣接するアイテム間をスクロールしているようなアニメーションを見たいです)?

このコード行は、この長いスクロールアニメーションを防ぐのに役立つと思いました。

[scrollView scrollRectToVisible:rect animated:NO];

しかし、運はありません。

助言がありますか?

[編集#1]特定のビューにスクロールする方法は次のようになります。

// I found view controller to which I want to scroll

CGRect rect = selectedViewController.view.frame;

float duration; // I calculate animation duration in some way now

[UIView beginAnimations:@"ScrollRectToVisible" context:nil];
[UIView setAnimationCurve:UIViewAnimationTransitionNone];

[scrollView scrollRectToVisible:rect animated:NO];
[UIView commitAnimations];

このコードでは、UIScrollViewで最初のビューから最後のビューにスクロールすると、アプリケーションは最後のビューにスクロールし、そのアニメーションは計算した期間の値の間持続します。そして、最初と最後の間に存在するすべてのビューが表示されます。私の願いは、最初のビューから最後のビューまで、それらの間のすべてのビューを見ずにすぐにスクロールすることです。

crollRectToVisible行を次のように変更すると:

[scrollView scrollRectToVisible:rect animated:YES];

同じことが起こります。今回はスクロールアニメーションが5倍速くなりますが、それでもその間のすべてのビューが表示されます。

メソッドからアニメーションを削除すると、すぐに遷移が発生します。私の質問は、UIScrollViewで隣接するビューにスライドしたときに同じように見える最後のビューにこのアニメーションをどのように実現するかです。

4

2 に答える 2

1

これら2つの間のすべてのビューを表示しない唯一の可能な方法は、それらをまったく表示しない、または非表示にすることです。

ただし、満足できない簡単な解決策は、それらの間のすべてのビューのアルファをゼロに設定してから、スクロールすることです。問題は、それが本当に速くスクロールすることだと思います。

もう1つのより複雑な解決策は、これらのビューを完全に削除するか、アルファを再びゼロに設定して、その宛先ビューを最初のビューのすぐ隣に移動することです。これにより、目的の効果が得られます。このスクロールの後、そのビューを元の位置に戻し、同時に(contentOffsetを変更して)元の位置にスクロールする必要があります。これにより、ユーザーは気付かないようになり、すべてのビューを画面に戻します。

つまり、スクロールビューを縮小するようなものに見えます。

于 2012-08-14T11:35:55.647 に答える
1

したがって、必要なのは次のとおりです。

  • a、b、c、d、eの5つのビューがあると仮定します
  • あなたは「b」にいて、「e」が「b」の隣にあり、「c」または「d」が表示されていないかのように「e」にアニメーション化したい
  • ユーザーが「e」を見たいことを示すボタンを押すと、最初に「c」と「e」を入れ替えます。
  • 'b'から'e'(現在はその隣人です)まで好きなようにアニメートします
  • アニメーションが停止すると(完了ブロック付きのブロックアニメーションを使用する必要があります)、次のすべてを実行します。
    • 'c'と'e'を交換します
    • scrollViewのcontentOffsetを設定して、水平方向の値が「e」になるようにします。

これで、アレイは元の状態に戻り、ユーザーはそれに対して賢明ではありません。

于 2012-08-14T11:37:43.120 に答える