Erstens Haftungsausschluss verlängert inspiriert. Wenn Sie userInteractionEnabled
auf NO
auf der UIScrollView
festlegen, werden keine Touch-Ereignisse an die Untersichten übergeben. Soweit mir bekannt ist, gibt es mit einer Ausnahme keinen Weg: Berühre Berührungsereignisse in der Superansicht des UIScrollView
und übertrage diese Ereignisse speziell an die Unteransichten von UIScrollView
. Um ehrlich zu sein, ich weiß nicht, warum Sie das tun wollen. Wenn Sie bestimmte UIScrollView-Funktionen deaktivieren möchten (wie ... nun, Scrollen), können Sie dies einfach tun, ohne UserInteraction zu deaktivieren.
Wenn ich Ihre Frage verstehe, müssen Sie Tap-Ereignisse von UIScrollView verarbeitet und an die Subviews übergeben? Auf jeden Fall (was auch immer die Geste ist), ich denke, was Sie suchen, ist die Protokollmethode gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: im Protokoll UIGestureRecognizerDelegate
. Stellen Sie in Ihren Untersichten, unabhängig von den Gestenerkennern, einen Delegaten (vermutlich die Klasse an erster Stelle) auf dem Gestenerkenner ein. Überschreiben Sie die obige Methode und geben Sie YES
zurück. Nun wird diese Geste zusammen mit allen anderen Erkennern erkannt, die die Geste "gestohlen" haben könnten (in Ihrem Fall ein Tippen). Mit dieser Methode können Sie Ihren Code sogar so einstellen, dass er nur bestimmte Gesten an die Unteransichten sendet oder die Geste nur in bestimmten Situationen sendet. Es gibt Ihnen viel Kontrolle. Nur sicher sein, um die Methode zu lesen über, vor allem in diesem Teil:
Diese Methode wird aufgerufen, wenn die Anerkennung einer Geste durch entweder GestureRecognizer oder otherGestureRecognizer die Erkennungs andere Geste Anerkennung seiner Geste blockieren würde. Beachten Sie, dass mit der Rückgabe von YES die gleichzeitige Erkennung garantiert ist; die Rückgabe von NO andererseits ist nicht garantiert, simultane Erkennung zu verhindern, da der Delegat der anderen Gestenerkenner YES zurückgeben kann.
Natürlich gibt es einen Vorbehalt: Dies gilt nur für Gestenerkenner. So können Sie immer noch Probleme haben, wenn Sie versuchen, touchesBegan:
, touchesEnded
usw. zu verwenden, um die Berührungen zu verarbeiten. Sie können natürlich hitTest:
verwenden, um rohe Touch-Ereignisse an die Unteransichten zu senden, aber warum? Warum sollten Sie die Ereignisse unter Verwendung dieser Methoden in UIView
verarbeiten, wenn Sie eine UIGestureRecognizer
an eine Ansicht anhängen können und alle diese Funktionen kostenlos erhalten? Wenn Sie Berührungen in einer Weise verarbeitet haben, die kein Standard UIGestureRecognizer
bieten kann, UnterklasseUIGestureRecognizer
und bearbeiten Sie die Berührungen dort. Auf diese Weise erhalten Sie die gesamte Funktionalität eines UIGestureRecognizer
zusammen mit Ihrer eigenen benutzerdefinierten Touch-Verarbeitung. Ich glaube wirklich, dass Apple für UIGestureRecognizer
vorgesehen hat, um die meisten (wenn nicht alle) benutzerdefinierten Verarbeitungscodes zu ersetzen, die Entwickler auf UIView
verwenden. Es ermöglicht die Wiederverwendung von Code und es ist viel einfacher zu handhaben, wenn es darum geht, welchen Code welcher Touch-Event verarbeitet.
Rahmen userInteractionEnabled auf NO und erwarten Benutzerinteraktionsdaten scheint wie ein Universum erschütternde Paradox. – borrrden
Möchten Sie zwischen einer Berührung und einer Schriftrolle unterscheiden? – shannoga