2009-05-15 17 views
6

¿Alguien tiene alguna idea sobre cómo podría implementar lo siguiente en el iPhone? Tenemos un mapa de los EE. UU., Y tiene diferentes regiones (regiones climáticas, creo) que son de diferentes colores. No son rectangulares, y no siguen estado, zip o condado o cualquier otra línea definida. Entonces, nuestras áreas son muy redondas y ni siquiera necesariamente contiguas.iPhone, Mapa, áreas no rectangulares seleccionables

ME ENCANTARÍA darles a nuestros usuarios la posibilidad de hacer clic en su región y podría decir desde dónde tocaron la región en la que se encontraba, pero a mi modo de ver, no pude hacer muchos muchos rectángulos para hacer un mejor ajuste en las curvas, no puedo encontrar la manera de hacerlo.

¿Alguna idea?

EDIT: Las regiones podrían ser tan duro como este ... link text

+2

Si el mapa tiene un código de color, ¿por qué no permitir que los usuarios hagan clic en cualquier lugar y luego ver el píxel que seleccionaron? –

+0

Uh. Uh. Santa mierda eso es brillante. Lo miraré. –

+0

Nikhil - 2 cosas. Primero, haga una respuesta a su comentario y lo aceptaré. Pero en segundo lugar, ¿conoces el código para hacer una prueba de éxito sobre qué color se tocó desde el iPhone SDK? –

Respuesta

10

¿Cómo se definen estas regiones? Si usted puede obtener los datos de puntos, a continuación, crear una CGPath usando:

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); 

A continuación, cada vez que el usuario toca, para cada región, comprobar si contiene el punto de contacto:

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

Y no lo hacen se olvide de liberar cuando haya terminado con las regiones:

CGPathRelease(path); 

Tenga en cuenta que puede crear varios subtrazados separadas en una CGPathRef y se les presentarán todas las subtrazados cuando se echa para containmen t.

Si lo desea, puede intentar usar arcos o curvas para obtener las líneas correctas, pero eso es algo con lo que no estoy muy familiarizado.

+0

Gran idea. No estoy seguro de poder llevarlo a cabo (edité mi pregunta para vincularla a un mapa de muestra). hacer ese tipo de rutas, o al menos una aproximación de ellas, puede ser un poco difícil. –

+0

Después de mirar la imagen, solo tengo curiosidad, ¿qué tan precisa es esa imagen en lo que respecta al tamaño? No desea tener un área mucho más pequeña que aproximadamente 44x44 píxeles o de lo contrario el usuario no podrá hacer clic en ella. Sin embargo, la idea de Nikhil no fue tan mala; Echa un vistazo al color en el que hicieron clic. Por curiosidad ... ¿es realmente solo una imagen la que muestra, sin ningún otro dato que la acompañe? –

+0

Ed: Honestamente, estamos en la fase de planificación en este momento, así que trabajaré con el artista gráfico. En realidad, probablemente haremos un mapa ENORME cortado en secciones, y permitirá hacer zoom para que puedan hacer clic con bastante precisión. Grandes comentarios, sin embargo. –

7

Tal vez necesite un mapa de bits codificado por color para realizar su prueba de detección.

Tendría un mapa de bits para mostrar, pero otro mapa de bits que tiene regiones codificadas de un solo color. Cuando el usuario hace clic en el mapa de la pantalla, observa qué color tiene ese píxel en su mapa de prueba de aciertos y luego realiza la acción correspondiente.

+3

+1 para el empleo de un truco de sombrero muy viejo y muy limpio – slf

Cuestiones relacionadas