0

私は Cocoa Touch プログラミング (および一般的な Cocoa の最初の 1 つ) に初めて取り組み、iPhone 用の簡単なゲームを作成していますが、この質問は一般的なココア タッチに関するものです。

メイン UI は、画面全体に水平に配置された同一の動作ボタン (色のみが異なる) のストリップで構成されます。これらはボタンのように機能しますが、カスタムの描画外観が必要です。それぞれが同じ方法でタッチ イベントに応答し、アプリケーション内の他のイベントをトリガーします。

私はカスタム ビューを定義したいと考えています。これは、標準的なボタンを多数用意するだけでなく、動作をより詳細に制御できるようにするためと、ココア プログラミングについて詳しく学ぶためでもあります。

  • それぞれが自身を描画してタッチ イベントを転送するサブビューの配列を持つメイン ビューを定義する必要がありますか? 各ボタンは、タッチしたときに押された状態を表示するなどの標準的なことを行う必要があります。この種のシナリオ用の既存のコンテナー ビューはありますか?

  • それとも、ストリップ全体を描画し、タッチが発生した場所を検出する 1 つのメイン ビューを定義する必要がありますか? これは設計が不十分なアプローチだと思います。ヒット テスト コードをプログラミングするべきではありません。


質問を明確にするために編集されました

4

4 に答える 4

1

サブビューの配列を使用する必要があります。そうすれば、各「ボタン」クラスはそれ自体を描画する方法を認識し、そのスーパービュー(指定された「メインビュー」)はボタンを移動する必要のある場所に配置します。

そしてNDAの2番目:iPhoneについて話してください。

于 2010-02-12T14:59:56.087 に答える
1

ボタンがたくさんあり、それらを使って派手なことをしたい場合は、レイヤーを使用することをお勧めします。UIView は、タッチされたレイヤーの解釈 (ヒット テスト) を処理し、適切に応答します。さまざまなエフェクトやアニメーションを備えた多数のボタンを管理するだけであれば、こちらの方が簡単な方法かもしれません。

悪いエンジニアリングに関しては、まったくありません。関連するガイドを見ると、コア アニメーションとレイヤーにはヒット テストが必要であることがわかりますが (比較的簡単ですが)、すべての描画を行う UIView よりもはるかにクリーンで、多くのサブビューよりも効率的です。これら2つのアプローチの間をうまくすり抜けます。

完全な開示:私は、このことを自分で最大限に活用する方法について頭を悩ませているだけですが、より複雑なインタラクティブコントロールについてです。

于 2010-02-12T15:22:09.727 に答える
1

より軽量なアプローチは、UIView のレイヤーにサブレイヤーを追加することです。hitTest: を使用して、UIView で受け取ったタッチを、それを受け取る必要がある CALayer インスタンスにディスパッチします。

UIResponder の動作 (touchesBegan など) がさらに必要な場合は、サブレイヤーの代わりにサブビューを使用することをお勧めします。これにより、中央のレスポンダー (メインのUIView)。

したがって、重要なのは、個々のボタンに関連付けられた動作がどれだけメインの UIView によって認識される (処理される) かということです。中央の場所からすべてを制御することが理にかなっている場合は、すべてのロジックを UIView に配置し、軽量表示の目的でサブレイヤーのみを使用できます。動作をボタン自体に配置する方が理にかなっている場合は、それらを UIResponder にする必要があり、そのため UIView をサブクラス化し、メイン ビューのサブビューとして追加する必要があります。

于 2010-02-12T16:09:10.173 に答える
0

Interface Builder でビューをレイアウトできます。UIButtonビュー コントローラのビューに一連の をドラッグするだけです。

イベントに応答するにIBActionは、View Controller で を定義し、それにボタンを接続します。

これはすべて非常に基本的なことです。少なくとも、Apple がオンラインで提供している iPhone プログラミングの紹介を一通り読むことを強くお勧めします。iPhoneとInterface Builderの基本を教えてくれます。

于 2010-02-12T14:23:25.790 に答える