2016-12-15 2 views
0

Ich mache eine App auf Xcode und ich benutze UI-Tasten. Ich benutze Bildhintergrund und stelle ein Bild von einem Wal in PNG-Form. Ich will es so, dass wenn ich auf den Wal drücke, wird es einen Zähler erhöhen. Ich möchte den Zähler nicht erhöhen, wenn der Hintergrund/transparente Teil der Taste gedrückt wird. Ich möchte den Zähler nur erhöhen, wenn der innere Teil des Wals gedrückt wird. Wie mache ich das? Ein UIButton reagiert immer auf Berührungen innerhalb seiner gesamten Grenze. Wie entferne ich diese Einschränkung?Wie mache ich eine geformte UI-Taste auf Swift 3?

+0

Ist dies wirklich notwendig auf einem echten iOS-Gerät, wo das Berühren des Knopfes mit einem Finger viel weniger präzise ist als das Klicken auf den Knopf im Simulator mit einem Mauszeiger? – rmaddy

Antwort

-1

einen Bezier-Pfad in der Ziehfunktion einer Subklasse UIControl Render

+0

Dies hat keinen Einfluss darauf, ob der Tap im Image registriert ist oder nicht. – rmaddy

+0

Gut Skeeter, ein kleines bisschen von Ihrer Seite würde Sie informieren, dass meine Antwort das OP in die richtige Richtung zeigt, anstatt ein Schlag für Schlag Rezept. Für andere außer dem Abstimm-Muddy-Lesen hat UIControl Funktionen zum Übersteuern für Taps, bei denen geprüft werden kann, ob der Tap-Punkt innerhalb des Bezier-Pfads liegt oder nicht. –

+0

Die Frage ist zu fragen, wie man mit den Berührungen nur innerhalb der Bildform umgehen soll. Wie hilft die Aussage, einen Bezierpfad zu rendern, dazu? Es tut es nicht. Diese unzusammenhängenden Informationen weisen das OP nicht in die richtige Richtung. – rmaddy

0

Eine Alternative einen UIButton zu verwenden ist eine CAShapeLayer zu verwenden. Sei der Inhalt dein Wal - ich stimme mit @rmaddy überein, hoffe, es ist groß genug! - Fügen Sie der Ansicht einen Tap Recognizer hinzu und verwenden Sie die Methode hitTest() des CALayers, um festzustellen, ob sie angetippt wurde.

Verwandte Themen