1

ここでは平易な英語を使用しています。私は複数のタブを備えたこの素晴らしいアプリを持っており、各タブ(UIViewControllerのサブクラス)にはそれがあります。タブの1つには、(とりわけ)内部にボタンがあり、多くの機能があります。ボタンはきれいで(ネットで見つけたUIGlossyButtonのサブクラス)、マイクが表示されますボタンを押すと、ボタン(タブ)が音声を録音し、自動的に停止します(音量レベル/タイムアウトを検出することにより)

  • 録音中、タブコントローラーはボタンの上部にLEDメーターを表示します
  • 録音後、ボタンはスピーカーを表示するアンサーボタンと交換されます
  • スピーカーをタップすると音声が再生されます
  • スピーカーをスワイプすると「削除」でき、マイクにリセットされます

この「ウィジェット」は素晴らしく、私はそれが大好きです。今、私はこれを他のタブの中に入れたいと思っています。これは、コピー/貼り付けではなく、抽象化の候補のように見えます。

私を殺しているのは、このすべての機能(ボタンの表示/非表示/交換、サウンドの録音、サウンドレベルの分析)をウィジェットにパッケージ化する必要があるかどうかです。もしそうなら、いくつのクラスを使用する必要があり、各サブクラスはどのクラスにする必要がありますか?そして最後に、Interface Builderで、タブ内のストーリーボードにドラッグするオブジェクトと、[カスタムクラス]ボックスに入力するクラスを指定します。

4

1 に答える 1

3

単一のUIViewサブクラスで行うことはたくさんあるように思えます。私はこれを一連のクラスに、または少なくとも拡張UIGlossyButtonと関連するUIViewControllerの間で絶対に分割します。

ボタンの責任は次のとおりです。ボタン自体を描画し、ボタンが押されたときを認識し、アクションが実行されたときに何をするかについて最小限のロジックを実行できます(UIViewControllerにメッセージを送信するなど)。

ボタン自体をMVCのビューと考えてください。コントローラーは、実際にUIのアクションの背後にあるすべてのスマートに対して何をすべきかを実際に認識します。次に、サウンドメーターや音声ファイルなどは、オプションでモデルオブジェクト/クラスとして表す必要があります。iOSで、明示的なModelクラスを作成するのはやり過ぎだと思うことがあるので、ポリモーフィズムを備えたNSDictionaryのような通常のCocoaクラスを使用して、コントローラーからモデルを処理します。

于 2012-05-26T02:20:04.050 に答える