2012-03-28 14 views
1

12個のスライスで構成される円グラフがありますが、それらはすべて配列内にあります。アイデアは、特定のスライスに触れることができ、アレイ内で正しいインデックス位置を受け取り、そのスライスを上下にスケールすることができるようにすることです。私はスライスの作成とスケーリングを行いましたが、正しいインデックスを選択した後の数学は私を困惑させました。画面上のオブジェクトの配列インデックスを見つける

間違ったインデックス番号を返し、現在のコード(slicesArray = 12)私がある:

UITouch *touch = [touches anyObject]; 
CGPoint point = [touch locationInView:self.view]; 
int index = atan2f(point.x-self.view.center.x, point.y-self.view.center.y) * self.slicesArray.count/(2*M_PI); 

この画像は正しいインデックス番号を表す黒のテキストとスライスを示し、白のテキストを表しています上記のコードが返すもの任意の助け

enter image description here

感謝。

+0

スライスの種類は? ImageViewを使用していますか? – mithilesh

+0

UIBezierPathの内部UIViewです。各スライスには独自のUIViewがあります。 –

答えて

1

UIImageViewを使用してすべての画像を表示している場合は、Here's my answer will help youです。 あなたがする必要があるのは、個々のUIImageViewのsetTagです。タッチしたUIImageViewを識別します。そのタグは配列のインデックスを作成し、NSArrayに渡して値を取得することもできます。

+0

それは個々のUIViewのために働くことができます。 UIImageViewをUIView(上記の私の答え)に置き換えれば、結果が得られます。 – Hemang

+0

Genius!私はインデックス0で私のスライスをスケーリングするメインビューで1つの問題がありました。私はself.viewを-1に設定し、それを修正しました。再度、感謝します。 –

+0

@Tobe_Sta、あなたを助けてうれしい!ハッピーコーディング:) – Hemang

0
UIViewのは

UIView *selectedPie; 

for (UIView *pie in slicesArray) { 

if(CGRectContainsPoint(pie.frame, point)) { 

selectedPie = pie; 
break; 

    } 

} 

に触れ、その後selectedPieをスケーリングされているかを調べるために、forループ

使用A。これが役に立ちますようにお願いします。

関連する問題