2009-05-15 16 views
6

Ktoś ma jakieś pomysły na to, jak mogę zaimplementować następujące elementy na iPhone'ie? Mamy mapę Stanów Zjednoczonych i różne regiony (jak sądzę) mają różne kolory. Nie są prostokątne i nie podążają za stanem, zamkiem błyskawicznym, okręgiem ani żadnymi innymi zdefiniowanymi liniami. Nasze obszary są bardzo okrągłe, a nawet niekoniecznie ciągłe.iPhone, mapa, klikalne, nieprostokątne obszary

Chciałbym, aby nasi użytkownicy mogli kliknąć na ich region i będę w stanie powiedzieć, od miejsca, w którym dotknęli tego regionu, ale dla mojego życia, nie robiąc wielu wielu prostokątów do zrobienia najlepsze dopasowanie na zakrętach, nie mogę wymyślić, jak to zrobić.

Wszelkie pomysły?

EDIT: Regiony może być tak trudne, jak to ... link text

+2

Jeśli mapa jest oznaczona kolorami, dlaczego nie pozwolić użytkownikom kliknąć w dowolnym miejscu, a następnie spojrzeć na wybrany piksel? –

+0

Uh. Uh. Święte bzdury, które są genialne. Przyjrzę się temu. –

+0

Nikhil - 2 rzeczy. Najpierw skomentuj odpowiedź jako komentarz, a ja to zaakceptuję. Ale po drugie, czy znasz kod, aby zrobić najostrzejszy na jaki kolor został wybrany z iPhone SDK? –

Odpowiedz

10

Jak te regiony zdefiniowane? Jeśli można uzyskać dane punktu, a następnie utworzyć CGPath używając:

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

Wtedy gdy dotyka użytkownika, dla każdego regionu, należy sprawdzić, czy zawiera on punkt dotykowy:

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

I nie zapomnij zwolnić, gdy skończysz z regionów:

CGPathRelease(path); 

pamiętać, że można stworzyć kilka oddzielnych podścieżki w jednym CGPathRef i będzie sprawdzać wszystkie podścieżki kiedy sprawdzić containmen t.

Jeśli chcesz, możesz spróbować użyć łuków lub krzywych, aby uzyskać prawidłowe linie, ale to jest coś, z czym nie jestem zaznajomiony.

+0

Świetny pomysł. Nie jestem pewien, czy mógłbym to zrobić (zredagowałem moje pytanie, aby połączyć z próbną mapą). tworzenie takich ścieżek, a przynajmniej ich przybliżenie, może być nieco trudne. –

+0

Po obejrzeniu tego zdjęcia jestem ciekawy, jak dokładny jest ten obraz pod względem wielkości? Nie chcesz, aby obszar był o wiele mniejszy niż około 44 x 44 piksele, inaczej użytkownik nie będzie mógł go kliknąć. Jednak pomysł Nikhila nie był zły; spójrz na kolor, który kliknęli. Z ciekawości ... czy to naprawdę tylko jeden obraz, który wyświetlasz, bez żadnych innych danych? –

+0

Ed: Szczerze, jesteśmy teraz w fazie planowania, więc będę pracował z grafikiem. W rzeczywistości prawdopodobnie wykonamy OGROMNĄ mapę podzieloną na sekcje i umożliwiamy powiększanie, aby mogli precyzyjnie kliknąć. Ale świetne komentarze. –

7

Być może potrzebujesz bitmapy z kolorami, aby wykonać test trafień.

Będziesz miał jedną mapę bitową do wyświetlenia, ale inną mapę bitową, która ma regiony oznaczone jednym kolorem. Kiedy użytkownik kliknie na mapę wyświetlania, sprawdzisz, jaki kolor piksela znajduje się na mapie testu trafienia, a następnie wykonaj odpowiednią akcję.

+3

+1 za zatrudnienie bardzo starej i bardzo schludnej sztuczki w kapeluszu – slf

Powiązane problemy