ここでは比較的新人です。一種の初心者の質問で申し訳ありません。答えを探してみました。
ユーザーが iPhone を持っている角度に基づいて、視覚的なアニメーション効果をビュー コントローラーの UIImageView に適用する方法をコーディングしました。基本的に、CMMotionManager を使用して角度を提供し、その角度を使用して、bounds.center を変更して UIImageView をシフトしています。すべてがView Controllerに詰まっている場合はうまく機能しますが、よりクリーンで再利用可能にしたい.
そこで、UIImageView をサブクラス化し、それにモーション マネージャー、モーション マネージャー ブロック ハンドラー、操作キュー、およびデバイスの角度を UIImageView のシフトに対応する数値にマップするいくつかのメソッドを追加しました。視覚効果を制御するためのさまざまなパラメーターを受け入れるカスタム init メソッドを作成しました。次に、このクラスのインスタンスをサブビュー (addSubview:) としてコントローラーのビューに追加するのと同じくらい簡単でした。バックグラウンド スレッドと自動解放プールも使用していました。スリック、私は思った。
視覚的には機能しているように見えますが、多くの理由 (Instruments のメモリ消費量が増え続けていることを含む) により、これは UIImageView のサブクラスに詰め込むべきではないと考えています。これを設計するためのより良い方法はありますか? たとえば、UIViewController とは異なり、UIImageView のサブクラスには viewDidLoad/viewDidUnload/...appear/etc がありません。これにより、モーションマネージャーの更新を開始および停止できます。画像効果クラスでインスタンス化するのではなく、アプリ全体に対して単一のモーション マネージャーを作成できるはずです。
アプリごとに CMMotionManager のインスタンスを 1 回だけ持つ必要があり、Jonathan のメソッドを実装している必要があることは認識していますが、View Controller から行う方が簡単な場合は、気の利いたクラスから appDelegate にアクセスする必要があることに気付きます。そこから螺旋状に下へ。
あまりにも多くのことを求めているのでしょうか、それとも非常に単純な概念を理解していないだけですか?