2009-05-15 5 views
6

iPhone에서 다음을 구현할 수있는 방법에 대한 의견이 있으십니까? 우리에게는 미국의지도가 있습니다. 다른 색 (기후 지역, 저는 믿습니다)이 다릅니다. 그것들은 직사각형이 아니며 주 또는 우편 번호 또는 다른 정의 된 행을 따르지 않습니다. 따라서 우리 지역은 매우 둥글고 반드시 인접하지는 않습니다.iPhone, Map, Clickable non-rectangular areas

나는 사용자가 자신의 지역을 클릭 할 수있는 능력을 제공하는 것을 좋아할 것이고 나는 그들이 어떤 지역을 건드린 지 알 수있을 것이다. 그러나 내 삶을 위해서, 할 많은 많은 많은 직사각형을 만들기에 부족하다. 곡선에 가장 잘 어울리는데 어떻게해야 할지를 알 수 없습니다.

아이디어가 있으십니까?

편집 : 영역은

+2

지도가 색상으로 구분되어있는 경우 사용자가 아무 곳이나 클릭 한 다음 선택한 픽셀을 보도록하겠습니다. –

+0

어. 어. 이런 젠장, 훌륭해. 나는 그것을 들여다 볼 것이다. –

+0

Nikhil - 2 가지. 첫째, 귀하의 의견을 대답하고 내가 그것을 받아 들일 것입니다. 하지만 둘째, iPhone SDK에서 어떤 색상을 만졌는가에 대한 적법한 테스트를 수행하는 코드에 대해 알고 있습니까? –

답변

10

어떻게 link text는이 지역이 정의 ... 열심히이 같은 될 수 있을까? 당신이 포인트 데이터를 얻을 수있는 경우에, 사용 CGPath을 만듭니다

CGPathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path,null,xpoints[0],ypoints[0]) 
for (int i = 1; i < numpoints; ++i) { 
    CGPathAddLineToPoint(path,null,xpoints[i],ypoints[i]); 
} 
CGPathCloseSubpath(path); 

을 다음 사용자의 터치가 각 지역, 그것은 터치 포인트가 포함되어 있는지 여부를 확인 할 때마다 :

if (CGPathContainsPoint(path,null,touchPoint,false)) ... 

을 그리고하지 당신이 지역을 완료하면 해제하는 것을 잊지 : 한 CGPathRef 여러 별도의 서브 패스를 만들 수 있습니다 당신이 containmen를 확인할 때 모든 하위 경로를 확인합니다

CGPathRelease(path); 

주 티.

원하는 경우 호를 만들거나 곡선을 사용하여 선을 올바르게 만들 수 있지만 그다지 익숙하지 않은 내용입니다.

+0

좋은 아이디어. 나는 그것을 제거 할 수 있는지 확신하지 못한다. (나는 샘플 맵에 링크하기 위해 나의 질문을 편집했다.) 그러한 종류의 경로를 만들거나 적어도 그것들을 근사치로 만드는 것은 약간 어려울 수 있습니다. –

+0

그림을보고 난 후에, 단지 호기심이 큽니다. 크기만큼의 이미지가 얼마나 정확합니까? 약 44x44 픽셀보다 너무 작은 영역을 원하지 않으면 사용자가 이미지를 클릭 할 수 없습니다. 그러나 Nikhil의 생각은 그렇게 나쁘지 않았습니다. 클릭 한 색상을 살펴보십시오. 호기심에서 벗어나 ... 다른 데이터를 사용하지 않고 보여주는 이미지 하나입니까? –

+0

Ed : 솔직히 우리는 지금 계획 단계에 있으므로 그래픽 아티스트와 함께 일할 것입니다. 실제로 우리는 거대한지도를 섹션으로 잘라서 줌을 허용하여 매우 정확하게 클릭 할 수있게 할 것입니다. 그래도 위대한 의견. –

7

히트 테스트를 수행하려면 색상 코딩 된 비트 맵이 필요할 수 있습니다.

표시 할 비트 맵이 하나 있지만 단색으로 코딩 된 영역이있는 다른 비트 맵이 있습니다. 사용자가 디스플레이 맵을 클릭하면 적중 테스트 맵에있는 픽셀의 색상을 확인한 다음 적절한 조치를 수행합니다.

+3

아주 오래되고 아주 산뜻한 해트트릭 트릭의 고용을 위해 +1 – slf