2012-04-04 7 views
1

Ich habe dieses Bild:UIGesture Anerkennung auf verschiedenen Bereichen eines UIImageView

enter image description here

Was ich tun möchte, ist ein UITapGestureRecognizer zu diesem Bild hinzuzufügen (oder ich kann das Bild in den verschiedenen Teilen aufgeteilt es besteht aus und fügt für jeden Teil einen UITapGestureRecognizer hinzu, um verschiedene Aktionen entsprechend dem getapten Blatt auszuführen. Wenn ich das Bild in verschiedene Bilder für jedes Blatt aufteile, werden sich die UIImageViews wahrscheinlich überlappen und das Tippen auf eines wird als Tippen auf ein anderes erkannt. Wenn Sie nur ein Bild haben, müssen Sie die Punkte auf dem Bildschirm kennen, die zu einem Blatt gehören und nicht zu einem anderen.

Irgendwelche Hinweise auf, wie man es tut, würde wirklich geschätzt. Danke

+1

Wie wird Ihr Bild erstellt? Wenn Sie es aus Pfaden zeichnen, können Sie diese speichern und prüfen, ob ein Pfad einen Berührungspunkt enthält. –

+0

@PhillipMills Es ist eine .png-Datei, dadurch wird es nicht von der Anwendung gezeichnet. – ubiAle

Antwort

2

Ändern Sie Ihr Verhalten, indem Sie die Gestenerkenner locationInView: überprüfen.

Wenn Sie das Bild als eine Einheit behandeln, implementieren Sie dies in Ihrem Gestenerkenner-Rückruf, um zu entscheiden, welches "Blatt" (falls vorhanden) angezapft wurde.

Wenn Sie das Bild als mehrere Bilder verarbeiten, können Sie auch in Ihrem Rückruf implementieren, oder Sie können auch in implementieren, beispielsweise gestureRecognizerShouldBegin: Ihre Delegierten Veranstaltungen für Berührungen außerhalb des Blattes zu unterdrücken, wie gezeichnet.

EDIT: Ich wusste nicht, dass Sie vielleicht auch Hilfe suchen würden, um herauszufinden, ob ein Punkt in einem Blatt liegt. @PhillipMills ist in diesem Punkt richtig: Wir müssen wissen, wie Sie das Bild zeichnen.

FOLLOW-UP: Dies ist etwas außerhalb meines Fachgebiets.

Die einfachste Ansatz (von einem Hit-Test-Standpunkt) ist zu tun, was @ PhillipMills vorgeschlagen, mit Quartz Zeichnung und CGPathContainsPoint(). Wenn Sie detaillierte Grafiken haben, die Sie als PNG rendern müssen, könnten Sie sicherlich einen einfachen Pfad erstellen, der (virtuell) überlagert ist, um Treffer-Tests zu ermöglichen. Andere Optionen, AFAIK, sind Hit-Tests mathematisch durchzuführen, aber Sie würden grundsätzlich CGPathContainsPoint() aber ohne einen Pfad reinimplementieren, oder verschiedene Tricks anwenden, die die Farbe der Pixel an Ihrem Berührungspunkt betrachten, um Treffertests durchzuführen . Googeln wird einige nützliche Ergebnisse ergeben, wenn Sie diese Route gehen, aber ehrlich gesagt für eine Form so einfach wie das, was Sie gezeichnet haben, verwenden Sie einfach einen Code UIBezierPath, um in Code neu zu erstellen.

+0

Das Bild ist eine PNG-Datei. Wenn ich das Bild als eine Einheit habe, wie kann ich herausfinden, wo ein Tipppunkt in einem bestimmten Blatt meines Bildes liegt ?! – ubiAle

+0

Danke für die Hinweise, ich habe noch nie UIBezierPath benutzt, aber ich werde es mir ansehen. Prost! – ubiAle

1

Nicht sicher, ob dies hilfreich sein, aber wenn Sie nicht weiter wissen, welches Blatt angeklickt wurde, könnten Sie einen alten Bildkartentrick verwenden, den wir in CD-ROM-Projekten für pixelgenaues Klick-Tracking auf Bildern verwendet haben.

Sie haben Ihr Bild in voller Größe. Machen Sie eine 25% (oder weniger) skalierte Version davon. Füllen Sie jede der Blattregionen, denen Sie Klicks zuordnen möchten, mit einer anderen Farbe. alles, was Sie ignorieren möchten, wird schwarz. Wenn das Bild in voller Größe angeklickt wird, erhalten Sie die x/y-Koordinaten und skalieren Sie sie um den Prozentsatz Ihres skalierten Bildes. Dann erhalte die Pixelfarbe des skalierten Bildes an der skalierten x/y-Koordinate. Durch das Bestimmen der Pixelfarbe wissen Sie, auf welches Blatt geklickt wurde.

Klingt klobig, aber es funktioniert wirklich gut und ist schnell.

(alles, was gesagt, ich glaube nicht, Alpha Bereiche der Bilder die Gestenerkenner auslösen -. So das Bild nach oben zu brechen wäre weniger kompliziert/code intensiv)

+0

das Bild sollte mit verschiedenen Farben gefärbt sein, damit es für mich schwierig wird, mit Quarz zu zeichnen (da ich es vorher noch nie gemacht habe) werde ich die Pixel-Farbtechnik verwenden. Prost! – ubiAle

Verwandte Themen