7

GUIライブラリのユーザーに、イン/アウト遷移効果の無制限のカスタマイズを提供しようとしていますが、シンプルさを維持/誤用を防止します(コントロールがビューに出入りするとき)。

そのために、Control クラスにデリゲートを追加しました。このデリゲートは、Control 参照と遷移完了パーセントを受け取ります。これにより、ユーザーはコントロールの位置/不透明度を任意の方法でスムーズに変換できるようになります。与えられたパーセント。彼がしなければならないことは、コントロールの入口/出口の前に遷移関数をサブスクライブすることだけです。

ただし、コントロールの初期位置も保存して比較する必要があるため、現在の完了率のみを使用してコントロールを遷移/アニメーション化することは不可能であることに気付きました。
このストレージ要件を明確にするために、デリゲート ファンクターの使用を強制する必要がありますか?

もしそうなら、どうすれば最小限の/きれいな方法でそれを行うことができますか?


ユーザーがカスタム遷移アニメーションを適用できるようにする別の方法を提案してください!

4

3 に答える 3

1

私があなたを正しく理解していれば、あなたのコントロールはアニメーション(計算)デリゲートを呼び出し(時々、おそらく各フレームで)、遷移競争率を渡します。次に、アニメーションデリゲートは、平行移動と位置を計算してコントロールに返します。これは正しいです?

上記が正しいと仮定すると、いくつかの解決策があります。

  1. 位置と不透明度のみをアニメートする場合:

    競争率のほかに、デリゲートを呼び出すときに、コントロールの位置と不透明度の初期状態も送信する必要があります。初期状態は、移行の開始時に記憶され、各呼び出しでデリゲートに送信される必要があります。

  2. 一般にプロパティを任意にアニメーション化する場合:

    競合率のほかに、Stateプロパティ(オブジェクトのタイプまたはさらに優れたディクショナリ)も提供します。このStateプロパティは、デリゲートとそのアニメーションロジックによって完全に制御されます。

    コントロールにとって、Stateプロパティにはセマンティクスや意味はありません。コントロールは、後続のデリゲートの呼び出し間でのみStateプロパティの値を保持する必要があります。

    すべてをまとめると、デリゲートは最初の呼び出しで状態を初期値で埋め、後続の呼び出しでこれらの値を使用します-必要なことは何でもします。Delegateは、計算された値をControlにも適用します。デリゲートで使用できるすべてのプロパティはパブリックである必要があることに注意してください。

于 2012-05-27T09:52:11.350 に答える
1

IMO コントロールのユーザーにコントロールの初期位置を提供する必要はありません。コントロールを初期位置に対して相対的に配置できるためです。負の数値は左と上、正の数値は右と下です。

次のコードは、高速遷移の関数です。

Point FastTranDiagonial(float Percentage){
   Thread.Sleep(10);
   int pixelsDist = (1 - Percentage)* 300;//300 is the maximum distance 
   return new Point(-pixelsDist ,pixelsDist);
}

デリゲートを呼び出すときは、Point をコントロールの初期位置に追加する必要があります。デリゲートには Thread.Sleep(X) が含まれていることに注意する必要があります。ユーザーは高速または低速のトランザクションを実行する可能性があるため、これはユーザーの制御下にある必要があります。

jQuery などの順次遷移を追加して、1 つの遷移が別の遷移の完了後に開始されるようにすることも検討してください。

幸運を

于 2012-07-30T09:41:26.660 に答える
0

少なくとも次のパラメーターをデリゲートに渡す必要があると思います:-

  • コントロール自体
  • コントロールを含むコンテナー (例: パネル)
  • 完了率

コントロール自体を渡すことにより、ユーザーはすべての初期状態情報 (位置など) を取得します。また、ユーザーがコントロールのプロパティを設定する必要がある場合は、コントロール自体への参照が必ず必要になります。

コンテナーは、ユーザーがそのサイズ/位置情報を必要とする場合、またはコントロールのために何か特別なことを行う必要がある場合に必要になることがあります。

于 2012-06-29T12:18:24.593 に答える