iPhone, карта, кликабельные непрямоугольные области - PullRequest
6 голосов
/ 16 мая 2009

У кого-нибудь есть идеи о том, как я мог бы реализовать следующее на iPhone? У нас есть карта США, и она имеет разные регионы (климатические регионы, я считаю), которые имеют разные цвета. Они не являются прямоугольными, и не следуют за государством или почтовым индексом или округом или любыми другими определенными линиями. Итак, наши районы очень округлые и даже не обязательно смежные.

Я ЛЮБЛЮ, чтобы дать нашим пользователям возможность нажимать на их регион, и я бы могла сказать, откуда они касались, какой это был регион, но, на мой взгляд, если бы не много, много прямоугольников, лучше всего подходит на кривых, я не могу понять, как это сделать.

Есть идеи?

РЕДАКТИРОВАТЬ: регионы могут быть так сложно, как этот ... текст ссылки

Ответы [ 2 ]

10 голосов
/ 16 мая 2009

Как определяются эти регионы? Если вы можете получить данные точек, создайте 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)) ...

И не забудьте отпустить, когда закончите с регионами:

CGPathRelease(path);

Обратите внимание, что вы можете создать несколько отдельных подпутей в одном CGPathRef, и он будет проверять все подпути, когда вы проверяете наличие.

Если хотите, вы можете попробовать использовать дуги или кривые, чтобы получить правильные линии, но это то, с чем я не слишком знаком.

8 голосов
/ 18 мая 2009

Может быть, вам нужно иметь цветное растровое изображение, чтобы провести тестирование на попадание.

У вас будет одно растровое изображение для отображения, но другое будет иметь одноцветные области. Когда пользователь нажимает на карту отображения, вы проверяете, какой цвет у этого пикселя на карте проверки попадания, а затем выполняете соответствующее действие.

...