2009-05-15 34 views
6

Bất kỳ ai có bất kỳ ý tưởng nào về cách tôi có thể triển khai những điều sau đây trên iPhone? Chúng tôi có một bản đồ của Hoa Kỳ, và nó có các khu vực khác nhau (vùng khí hậu, tôi tin) có màu sắc khác nhau. Chúng không phải là hình chữ nhật và không theo dõi trạng thái hoặc mã zip hoặc quận hoặc bất kỳ dòng nào được xác định khác. Vì vậy, các khu vực của chúng tôi rất tròn và thậm chí không nhất thiết tiếp giáp.iPhone, Bản đồ, các khu vực không phải hình chữ nhật có thể nhấp

Tôi rất muốn cung cấp cho người dùng khả năng nhấp vào khu vực của họ và tôi có thể biết được họ đã chạm vào vùng nào, nhưng đối với cuộc sống của tôi, thiếu nhiều hình chữ nhật phù hợp nhất trên các đường cong, tôi không thể tìm ra cách để làm điều này.

Bất kỳ ý tưởng nào?

EDIT: Các vùng có thể là khó như này ... link text

+2

Nếu bản đồ được mã hóa màu, tại sao không cho phép người dùng của bạn nhấp vào bất kỳ đâu và sau đó nhìn vào pixel họ đã chọn? –

+0

Uh. Uh. Holy crap thật tuyệt vời. Tôi sẽ xem xét nó. –

+0

Nikhil - 2 điều. Đầu tiên, hãy bình luận của bạn một câu trả lời và tôi sẽ chấp nhận nó. Nhưng thứ hai, bạn có biết mã để làm một hittest trên những gì màu sắc đã được xúc động từ SDK iPhone? –

Trả lời

10

như thế nào những khu vực được xác định? Nếu bạn có thể lấy dữ liệu điểm, sau đó tạo ra một CGPath sử dụng:

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

Sau đó, bất cứ khi nào chạm người dùng, cho từng vùng, kiểm tra xem nó có chứa các điểm tiếp xúc:

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

Và không quên để giải phóng khi bạn đang thực hiện với các khu vực:

CGPathRelease(path); 

Lưu ý rằng bạn có thể tạo nhiều subpath riêng biệt trong một CGPathRef và nó sẽ rà soát tất cả các subpath khi bạn kiểm tra cho containmen t.

Nếu bạn muốn, bạn có thể thử sử dụng vòng cung hoặc đường cong để có được đường thẳng, nhưng đó là điều tôi không quá quen thuộc.

+0

Ý tưởng tuyệt vời. Tôi không chắc tôi có thể kéo nó ra (tôi đã chỉnh sửa câu hỏi của mình để liên kết đến một bản đồ mẫu). làm cho những loại đường dẫn đó, hoặc ít nhất là một xấp xỉ của chúng, có thể là một chút khó khăn. –

+0

Sau khi nhìn vào bức tranh, tôi chỉ tò mò, hình ảnh đó có kích thước chính xác đến mức nào? Bạn không muốn có diện tích nhỏ hơn nhiều so với khoảng 44x44 pixel nếu không người dùng sẽ không thể nhấp vào đó. Tuy nhiên, ý tưởng của Nikhil không quá tệ; hãy nhìn vào màu sắc mà họ nhấp vào. Hết sức tò mò ... nó thực sự chỉ là một hình ảnh bạn đang hiển thị, mà không có bất kỳ dữ liệu nào khác đi kèm với nó? –

+0

Ed: Thành thật mà nói, chúng tôi đang trong giai đoạn lập kế hoạch ngay bây giờ, vì vậy tôi sẽ làm việc với các nghệ sĩ đồ họa. Trong thực tế, chúng tôi có thể làm cho một bản đồ HUGE cắt thành các phần, và cho phép phóng to để họ có thể nhấp vào khá chính xác. Bình luận tuyệt vời, mặc dù. –

7

Có thể bạn cần bitmap mã hóa màu để thực hiện thử nghiệm lần truy cập.

Bạn sẽ có một bitmap để hiển thị, nhưng một bitmap khác có các vùng được mã hóa một màu. Khi người dùng nhấp vào bản đồ hiển thị, bạn kiểm tra màu nào mà pixel đó nằm trong bản đồ thử nghiệm lượt truy cập của bạn và sau đó thực hiện hành động approriate.

+3

+1 cho việc làm một thủ thuật hat rất cũ và rất gọn gàng – slf

Các vấn đề liên quan