2012-03-28 4 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에서 슬라이스 크기를 조정할 때 한 가지 문제가있었습니다. self.view를 -1로 설정하여 고정 시켰습니다. 다시 한번 감사드립니다. –

+0

@Tobe_Sta, 다행스럽게 도와주세요! 해피 코딩 :) – Hemang

0

사용 A는있는 UIView

UIView *selectedPie; 

for (UIView *pie in slicesArray) { 

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

selectedPie = pie; 
break; 

    } 

} 

을 만진 후 selectedPie 확장되고있는 찾을 수 있습니다. 희망이 도움이