実行されたすべての操作を追跡せずに、複数の CGAffineTransform 操作を (アニメーション ブロックで) どのように実行しますか?
平行移動操作では、x、y 座標は使用されませんが、代わりにシフトする値が使用されます。つまり、現在翻訳されている場所、たとえば「場所 2」がわからない場合、「場所 3」に到達するためにどの値をシフトすればよいかをどのように知ることができるでしょうか?
例えば:
UIView のフレームは (0, 0) - 位置 1 にあります。変換を (768, 0) に変換し、-90 度回転 - 位置 2 に設定します。時間が経ち、(768, 1024) に移動したいと思います。さらに -90 度回転 - 位置 3.
2 位から 3 位に移動するために何を変換すればよいかを知るにはどうすればよいですか?
コンテキストでは、次のような iPad ビューを実現しようとしています。
- 画面全体を占める UIView
- 上端を占め、UIView の上にある UIToolbar
- iPad が回転すると、UIView はデバイスにとどまりますが、ツールバーは常に画面の上端に来るように回転します。
CGAffineTransform の移動と回転を使用してツールバーを移動しています。iPadを複数回回転させる場合を除いて、うまく機能します。最初の変換/回転は完璧に機能します。シフトする正しい値がわからないため、次の変換はオフになります。
アップデート:
UIView.transform 構造体で現在の変換 (tx、ty) 値を取得し、それらと新しい場所の違いを使用すると、機能するように見えます。ただし、ビューが回転している場合、これは機能しません。tx と ty の値は、前のローテーションにより反転する可能性があります。私はそれを処理する方法がわかりません。
更新 2:
いくつかの調査を行うと、ポイントの abs 値を取得し、UIView が垂直の場合は x と y を交換することで、tx、ty から元の回転していないポイントを取得できることがわかりました。今、次の一連の変換を正しい順序で正しく適用する方法を考え出しています。それらをどのように連結しても、UIViewは間違った場所に行き着くようです。これは複雑すぎるように思えますが、もっと簡単な方法があるはずです。