2009-06-26 15 views
0

これはかなり高いレベルですが、ココアは大きく、私はまだその周りに頭を抱えようとしています。誰かが私の期待を検証できますか...ココアタッチビュー、コントローラ、OOプログラミング全般を概念化する

私は、ユーザーがタッチして移動できる画面上にさまざまな数のビュー(車の画像など)を画面に表示したいとします。 UIViewを(UIImageViewまたはUIButtonではなく)UIImageプロパティでサブクラス化することから始めますか?次に、ビューコントローラで "赤"、 "青"、 "黄"の車をインスタンス化し、それらをNSMutableArrayに格納しますか?

私はInterface Builderで初期レイアウトを設定できましたが、カスタムオブジェクトをアレイに接続する方法がわかりませんでしたか?回転した状態で始める必要がある人もいます。 IBでどのように回転するかを理解することができませんでしたか?だから私は、この場合、ビューが表示される前にコード内に初期状態を構築する方が良いだろうと推測しています。

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

答えて

0

正しいトラックにいるようです。私は一度にあなたの期待の1のすべてに対処しようとするでしょう:

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

  2. 車のアレイをビューコントローラーに配置すると素晴らしいサウンドになります。

  3. 通常、インターフェイスビルダーのNIBファイルに初期レイアウトを保存するのが最善の策です。これにより、将来的にインターフェイスを簡単に変更できるようになり、画面上に物事を作成して配置するために必要な定型コードが大幅に削減されます。

つまり、複数のビューを1つのアレイアウトレットにバインドすることはできません。この特定のケースでは、私はいくつかの車を作成するビューコントローラの "viewDidLoad"関数を実装します。あなたは正しい道にいました!

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

希望に役立ちます!

EDIT:斜めに画像を描画するサンプルコードです。これは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); 
} 
+0

これは非常に役に立ちます。より多くのドキュメントや、例えば90度の角度でイメージを「手動で」描画する例を指摘できますか?私はAffine Transformsに慣れていません。それは私が欲しいものですか? – Meltemi

+0

アフィン変換を使用すると、ビューなどのビュー全体(ビューなど)を回転、拡大縮小、または傾けることができ、画像を回転させることができます。複雑な車モデルには複数の回転部分があるかもしれないので、ある角度で画像を描画するために低レベルの描画技法を使う方が良いでしょう。上のサンプルコードを参照してください! –

+0

素晴らしい!ありがと。しかし、私はちょうどブラックボックスを手に入れていますか?私は私のdrawRectコードを置き換えました{[carImage drawAtPoint:(CGPointMake(0.0、0.0))]; }あなたの画像を描画線に変更します:CGContextDrawImage(c、self.bounds、[carImage CGImage]); 。前に描画するために使用される画像(回転しない)。今は黒です...まだ回転していません。何か案は? – Meltemi

関連する問題