私は最初のiPhoneアプリを作成しようとしていますが、ある種の設計上の問題に直面しています。私がやりたいのは、アイコンのグリッドを作成することです。1つに触れると、左上のすべてのアイコンが「アクティブ化」され、下と右のすべてのアイコンが「非アクティブ化」されます。アイコンがアクティブになっている場合は1つの画像が表示され、アクティブになっていない場合は別の画像が表示されます。
私が抱えている問題は、これらの個々のアイコンのそれぞれにジェスチャ認識機能を割り当てたいということです。そのアイコンをタップすると、アイコンのグリッドを更新する関数を呼び出す必要があります。ただし、適切に更新するには、関数がグリッド内の画像の場所を引数として渡す必要があり、ジェスチャレコグナイザーの一部として引数を使用して関数を呼び出す方法はありません。
したがって、実際に必要なのは、UIImageViewを拡張して、2つの追加の整数とそれに含まれるグリッドを保持することだけです。そうすると、次のコードを作成できます。
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *tapgr = [[UITapGestureRecognizer alloc] initWithTarget:
self action:@selector(handleTap)];
[imageView addGestureRecognizer:tapgr];
:
:
- (void)handleTap
{
[self.grid updateTableFromRow:self.row andCol:self.col
}
ですから、これはそれを行う1つの方法だと思いますが、Objective-Cでクラスを拡張することは想定されておらず、ゼロから構築する必要があると言われています。この場合、必要なすべてのプロパティやインスタンス変数を使用してカスタムビューを作成し、このカスタムビューにUIImageViewを入力します。
ストーリーボードの作成を除いて、これはほとんど問題ありません。このアイコンのテーブルを(プログラムで)管理および作成するすべてのコードを、別のカスタムビューであるGridOfIconsViewに配置します。そのため、ストーリーボードでカスタムビューをドラッグして、GridOfIconsViewに設定しましたが、大きな白い長方形が表示されるだけで、ストーリーボードでアプリを視覚化できるようにしたいと考えています。アイコンに使用する実際の画像ファイルをストーリーボードにドラッグしてカスタムビューに設定できることは知っていますが、それはどのように機能しますか?その画像はカスタムビューの単なる背景ですか?プログラムで変更できますか?したがって、アクティブ化された画像が緑色の正方形で、非アクティブ化された画像が赤色で、最初に赤い正方形をストーリーボードにドラッグした場合、その赤い正方形の画像にアクセスできますか?
さらに懸念される問題は、データ構造内のこれらすべてのアイコンを、2d配列(id icons [] [])またはNS(Mutable?)ArraysのNS(Mutable?)Arrayとして管理したいということです。いずれにせよ、これらすべてへのリンクを含むようにデータ構造を初期化するにはどうすればよいですか?グリッドはおそらく8x8または10x10であり、これらのアイコンを接続する64〜100の@propertyを使用する方法はありません。これを賢明に整理する唯一の方法はプログラムで行うことだと思いますが、それでも、ストーリーボードでそれを視覚化するにはどうすればよいですか?