Frage

Ich habe ein statisches Kartenbild mit einem Bündel von Kreisen und Quadraten auf, dass Städte darstellen. Ich habe das Bild in ein Imageview geladen, die unter einem Scrollview Unter eingestuft wird, so dass ich Benutzer berührt und Zoom / Scroll über die Karte erfassen kann. Meine Herausforderung besteht darin, dass ich ein Etikett, um Pop-up will, wenn ein Benutzer eine dieser Kreise berührt / Quadrate für eine Stadt, ihnen zu sagen, welche Stadt es ist und möglicherweise eine Detailansicht für die Stadt laden. Ich dachte, ich könnte die relativen CGPoints alle Vorbelastung für die auf dem Imageview Karte in ein Wörterbuch basiert Städte so kann ich sie während eines „touchesBegan“ Ereignis verweisen, aber ich meinen Kopf schnell bekommen in über und möglicherweise gehen darüber die Falsche Weg.

Bisher alles funktioniert und ich kann die CGPoint x und y-Koordinaten von Berührungen erfassen. Das größte Problem, das ich habe ist die Bestimmung der Nähe der Benutzer berührt, um einen diskreten Punkt, den ich im Wörterbuch haben. Mit anderen Worten, wenn das Wörterbuch hat "Boston = NSPoint: {235, 118};" Wie kann ich feststellen, wenn ein Benutzer an diesem Punkt in der Nähe ist, ohne sie zu wiederholen, die Berührung zu machen, bis er genau ist? Gibt es einen einfachen Weg, um zu bestimmen, ob ein Benutzer berühren wird „schließen“ zu einem bereits bestehenden Punkt? Werde ich dies über die richtige Art und Weise?

Jede Beratung oder Klapse auf der Rückseite des Kopfes sind willkommen.

Danke, Mike

War es hilfreich?

Lösung

Sie könnten UIButtons verwenden, um die Städte zu vertreten. Dann müssen Sie den Standard Touch bekommen, markieren, etc, Verhaltensweisen mit weniger Aufwand. Addiert man die Tasten wie Subviews auf der Karte sollte dazu führen, dass zu skalieren und bewegt zusammen mit der Karte.

Andere Tipps

, wenn ich es richtig verstehe, wollen Sie, wenn der Punkt wissen, an dem die angezapfte Benutzer „in der Nähe“ genug an einem Punkt ist, der als Stadt markiert ist.

Sie müßten quantifizieren schließt das heißt einen Schwellenwert festlegen, nach der der Hahn weiter ist, vor dem der Hahn näher.

wenn Sie das tun, berechnen den kartesischen Abstand sqrt Koordinate ((x1-x2) ^ 2 + (Y1-Y2) ^ 2) für jedes Element in dem Array und Speichern der Ergebnisse in einem anderen Array (Wörterbuch mit x, y-Werte für die Städte lesen). dann nehmen Sie das Minimum des Ergebnisses. der Index dieses Ergebnisses ist die Stadt, die am nächsten an den Wasserhahn, wenn sie kleiner als der genannte Schwellenwert ist.

Sie können entweder einen R-Baum , oder Sie können die Nähe berechnen die Berührung zu jedem sichtbaren Punkt in der aktuellen Ansicht. Um die Nähe zu berechnen würden Sie normalerweise den Satz des Pythagoras verwenden, aber in diesem Fall können Sie die Quadratwurzel überspringen, weil Sie nur die relativen Größen zu vergleichen. Sie können auch eine Entfernung abgeschnitten erklären, wenn Sie sagen, 50 Pixel im Quadrat bis 2500. So würde das Ergebnis in ein Objekt gegeben, die Entfernung und Bezugspunkt und legen Sie die Objekte in einem NSMutableArray, nicht Addition der Ergebnisse unter dem Cutoff, und wählen Sie das Mindestergebnis.

Wenn Sie also einen Punkt berührt pT haben, dann für jeden Punkt pN, dann würden Sie berechnen:

d=(pT.x-pN.x)*(pT.x-pN.x) + (pT.y-pN.y)*(pT.y-pN.y); //d is the squared distance

Der Punkt pN mit dem minimalen d ist der Punkt, an pT am nächsten war. Und wie ich schon sagte, wenn Sie innerhalb von 10 Pixel berührt wollen zu zählen, können Sie diese d <= 10*10 testen;

Das Verfahren zur Prüfung auf Berührungen innerhalb einer 20x20 quadratischen Fläche auch funktioniert, außer wenn zwei Punkte innerhalb von 20 Pixel voneinander sind, dann müssen Sie wissen, was in der Nähe berühren Punkt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top