2012-01-22 3 views
0

私は、帽子、髪、目などのものを身体に付け加えることで、ドレスアップをプレイできるアプリを開発中です。ユーザーは基本的にメニューから項目をドラッグし、何らかの形で「addSubview: or insertSubview:belowSubview:/aboveSubview:」の画面にグラフィックをインスタンス化します。サブビュー「レイヤー」をデザインするにはどうすればいいですか?

質問には、常に他の項目の下に表示される項目があります。たとえば、「目」(青、茶、緑)のグラフィックスは常に「眼球」(さまざまな目の形や表現)の上に表示されます。しかし、私はユーザーに任意のプロセスを従わせることを強制しませんし、好きなようにドラッグ&ドロップすることもできますので、addSubview:適切ではないかもしれませんが、insertSubview:belowSubview:/ aboveSubview:あなたが下または上に追加したいアイテム。

理想的には、私はこのようなスタックに従います: アクセサリー>ヘアスタイル>眉毛>眼球>目...など。誰もこれを実装する方法の設計アイデアを持っていますか?ユーザーがメニューからヘアスタイルをドラッグすると、

self.view 
├─ self.accessoriesView 
│ ├─ braceletView 
│ └─ toeRingView 
├─ self.hairStylesView 
│ ├─ blondeWigView 
│ └─ hairClipView 
├─ self.eyebrowsView 
│ └─ archedEyebrowView 
├─ self.eyeballsView 
│ ├─ bloodshotEyeballView 
│ └─ regularEyeballView 
├─ self.eyesView 
│ └─ greenEyesView 
├─ etc. 

self.hairStylesViewのサブビューとして新しいヘアースタイルビューを追加:ありがとう

答えて

1

はあなたのビュー階層は次のようになりしてください。ユーザーが緑の目をメニューからドラッグすると、新しい目のビューがサブビューとしてself.eyesViewに追加されます。

subviewsアレイの後にあるビューは、ユーザーにとって「より近い」ものであり、subviewsアレイの前のビューにペイントします。したがって、コードでグループ化ビューを作成する場合は、正しい順序でグループ化ビューを追加するだけでaddSubview:を使用できます。または、ペン先でビューを設定した場合は、ペン先の輪郭に正しい順序で配置することができます。

+0

ありがとう、これは完全に動作します。しかし、これを実装することで、ViewControllerのビューにUIViewのスタックが作成されます。あなたのジェスチャーレコグナイザーが別のクラスで作成されている場合は、そのクラスにアクセスする方法が必要です。何も触れなかった場合、サブクラスでhitTestを使用して、これらのビューが次のサブビューに渡るようにしました:http://vectorvector.tumblr.com/post/2130331861/ignore-touches-to-uiview-subclass-but-not-その – user339946

+0

私はあなたがそれについて尋ねるかどうか疑問に思いました: –