0

これはかなり高いレベルですが、Cocoa は大きく、私はまだ理解を深めようとしています。誰かが私の期待を検証できますか...

ユーザーがタッチして動き回ることができる可変数のビュー (車の画像など) を画面に表示したいとします。(UIImageViewまたはUIButtonとは対照的に)UIImageプロパティでUIViewをサブクラス化することから始めますか?次に、View Controller で「赤」、「青」、「黄色」の車をインスタンス化し、それらを NSMutableArray に格納しますか?

Interface Builder で初期レイアウトをセットアップできましたが、カスタム オブジェクトをアレイに接続する方法がわかりません。回転した状態で開始する必要があるものもあります。IBで回転する方法もわかりませんでしたか?!? したがって、この場合、ビューが表示される前にコードで初期状態を構築する方がよいと思います。

最後に、表示されたら、touchesBegan、Ended など、アニメーション、およびビュー コントローラーで「車」を追加、削除、カウントするロジックを処理しますか?

4

1 に答える 1

0

正しい軌道に乗っているようですね。私はあなたのすべての期待に一度に対処しようとします:

  1. 画面上のビューは、カスタム UIView サブクラスまたは UIImageViews である可能性があります。将来追加したい他の機能について考えたいと思うかもしれません。UIView アプローチは最も柔軟性が高く、車の画像を手動で描画して回転を処理することもできます。これを行うには、UIView のサブクラスを作成し、画像プロパティと回転プロパティを指定してから、"drawRect:(CGRect)rect" 関数をオーバーライドして画像を描画します。

  2. 車の配列をビュー コントローラーに配置するのは素晴らしいことです。

  3. 通常、初期レイアウトを Interface Builder NIB ファイルに保存するのが最善の方法です。これにより、将来的にインターフェイスを簡単に変更できるようになり、画面上に物を作成して配置するために必要な多くのボイラープレート コードが省略されます。

とはいえ、多数のビューを単一の配列アウトレットにバインドすることはできません。この特定のケースでは、View Controller の「viewDidLoad」関数を実装して、複数の車を作成します。あなたは正しい軌道に乗っていました!

一般的なオプションではないため、Interface Builder でローテーションを設定することはできません。CAAnimation 変換を使用して回転を実装し、回転プロパティを設定してから、ある角度で画像を手動で描画できます。

それが役立つことを願っています!

編集: ある角度で画像を描画するためのサンプル コードを次に示します。Quartz (Core Graphics とも呼ばれます) を使用しているため、Apple のドキュメントでさらに多くの情報を入手できます。

- (void)drawRect:(CGRect)r
{
    // get the drawing context that is currently bound
    CGContextRef c = UIGraphicsGetCurrentContext();

    // save it's "graphics state" so that our rotation of the coordinate space is undoable.
    CGContextSaveGState(c);

    // rotate the coordinate space by 90º (in radians). In Quartz, images are 
    // always drawn "up," but using CTM transforms, you can change what "up" is!
    // Can also use TranslateCTM and ScaleCTM to manipulate other properties of coordinate space.
    CGContextRotateCTM(c, M_PI / 2);

    // draw an image to fill our entire view. Note that if you want the image to be semi-transparent,
    // the view must have opaque = NO and backgroundColor = [UIColor clearColor]!
    CGContextDrawImage(c, self.bounds, [[UIImage imageNamed:@"image_file.png"] CGImage]);

    // restore the graphics state. We could just rotate by -M_PI/2, but for complex transformations
    // this is very handy.
    CGContextRestoreGState(c);
}
于 2009-06-26T23:20:51.433 に答える