我是Iphone Development的新手,如何獲得特定的觸摸區域?
鑑於以下情況map。每當我選擇像「西澳大利亞」這樣的特定部分時,我都想提出觸摸事件。但是那個特定的區域不是方形或圓形來提及觸摸區域。邊界不正確。我如何獲得觸摸事件?
請任何人指導我或給我一個教程如何與該部分工作?
我是Iphone Development的新手,如何獲得特定的觸摸區域?
鑑於以下情況map。每當我選擇像「西澳大利亞」這樣的特定部分時,我都想提出觸摸事件。但是那個特定的區域不是方形或圓形來提及觸摸區域。邊界不正確。我如何獲得觸摸事件?
請任何人指導我或給我一個教程如何與該部分工作?
在您的鏈接地圖中,您可以看到每個區域由多邊形定義,由頂點數組表示。 (如果你沒有看到這個,那麼看看HTML源代碼,然後你會看到它。)你可以在互聯網上找到很多關於算法的討論,這些算法可以確定一個點是否在用這種方式描述的多邊形內。 Here is one discussion that may be worth looking at,並且在你被它的長度阻止之前(這是非常徹底的),請參閱標題爲The "Crossing Count" Algorithm
的部分。與我見過的其他人相比,這是一個非常簡單的方法。這涉及到確定線相交併計算多邊形的多少邊與射線相交。
你需要檢查每個多邊形的觸摸點,直到找到它在裏面。有一件可能值得的事情是首先檢查觸點是否在邊界框內,由每個多邊形頂點數組的min x,max x,min y和max y值定義。如果它不在邊界框內,那麼它不在多邊形內。
就檢測到觸摸事件和它在哪裏,look at my answer to this question,它告訴如何確定觸摸發生在屏幕上的哪個位置(使用touch:locationInView :)。
我不知道你是否打算放大和縮小圖像,但是這會增加一些複雜的事情。如果這個迴應沒有什麼幫助,你能提供更多關於你想要做什麼的信息嗎?
有幾個選項,但只有一個將是相當微不足道的實施。
首先,你不能用像UIButtons這樣的常規控件來完成這個任務 - 相反,你會想自己處理觸摸事件。
-1-彩色地區;你的地圖是彩色的,所有可點擊的區域都顯示不同的顏色。
在這種情況下,您只需檢查觸摸點下方的像素是否爲其顏色。類似的事情在example內完成。
-2-自定義觸摸地圖;幾何物體的地圖,理想的三角形。
您可能會創建某種由三角形組成的疊加貼圖。大小可能有所不同。該地圖上的所有三角形都鏈接到一個地區。無論用戶何時觸摸您的地圖,您都會運行碰撞檢測。有關簡單2D點到多邊形碰撞的詳細信息,請查看this article at topcoder。
@Jim在一般的便攜式算法上給出了很好的建議。由於您使用的是iPhone,因此將地圖信息轉換爲UIBezierPath
對象可能會很方便。有關如何創建這種路徑對象的詳細信息,請參閱Drawing and Printing Guide。然後你可以使用[UIBezierPath containsPoint:]
爲你做點擊測試。如果您希望獲得與網頁相同的效果,則使用路徑對象也可以方便地進行突出顯示。
+1用於很好地解釋交叉計數算法。 – Till