Wie kann ich die Sensibilität für Berührung und Ziehen ändern?

8

Ich arbeite an einer App für eine körperlich behinderte Bevölkerung und beim Testen stellen wir fest, dass sie große Probleme mit der standardmäßigen Touch-Drag-Funktionalität haben.

Wir haben einen Bildschirm mit einem Raster von Symbolen in einem UIScrollView. Sie können ein Symbol berühren, um es zu aktivieren, und Sie können eine beliebige Stelle im Raster berühren und ziehen, einschließlich eines Symbols, um durch das Raster zu scrollen und weitere Symbole zu sehen.

In iOS ist das Standardverhalten, dass Sie in einer Bewegung berühren und ziehen. Dies erfordert eine gewisse physische Koordination, und wenn Sie berühren und pausieren und dann ziehen oder ein wenig vom Kurs abziehen, behandelt das System dies als eine einfache Berührung. Also machen unsere Tester Sachen wie:

  • Berühren Sie, halten Sie einen Moment inne und versuchen Sie dann, zu ziehen. Das Raster scrollt nicht. Wenn sie versuchten, durch Ziehen eines Symbols einen Bildlauf durchzuführen, wird beim Aktivieren der Berührung stattdessen das Symbol aktiviert.

  • Berühre, versuche, vertikal zu ziehen (die einzige unterstützte Richtung), aber wechsle zuerst ein wenig horizontal. Gleiches Ergebnis wie oben.

Die Frage ist also: Gibt es eine Möglichkeit, die Berührungsverarbeitung zu überschreiben, um mehr Toleranz für Langsamkeit oder Ziehen-Ungenauigkeit aufzubauen, so dass die App die obigen Aktionen als Bildlaufanfragen korrekt interpretiert?

    
Joshua Frank 23.03.2013, 17:49
quelle

5 Antworten

0

Es stellt sich heraus, dass der Standard UIScrollView scrolling korrekt ist, aber das Problem war einfach, dass wenn der Benutzer eine Schaltfläche berührt, die Schaltfläche das Berührungsereignis nicht die ScrollView, und das hat mich durcheinander gebracht.

Also war die Lösung für dieses Problem, zu dem ich kam, Deaktivieren die Tasten und dann die ScrollView empfängt die Berührung. Ich verwende dann eine benutzerdefinierte Unterklasse von UIScrollView , in der ich die Methoden TouchesBegan und TouchesEnded implementiere. Bei diesen Methoden zeichne ich auf, wo der Benutzer auf und ab geht, und wenn diese sich nahe beieinander befinden und über eine (deaktivierte) Schaltfläche, mache ich dann die Aktion, die diese Schaltfläche ausführt.

Das funktioniert perfekt, aber ich denke, es ist sicherlich mehr Arbeit als nötig. Vielleicht sollte meine Frage lauten: Gibt es eine Möglichkeit, die Schaltflächen aktiviert zu lassen, aber dafür zu sorgen, dass die Bildlaufanzeige Berührungsereignisse vor ihren Unteransichten erhält, wie gewünscht rollt und dann die Ereignisse an die Unteransichten weiterleitet?

    
Joshua Frank 08.04.2013, 13:34
quelle
3

Lesen Sie zuerst dieses Handbuch vollständig (wenn nötig, zweimal oder dreimal), um eine Vorstellung davon zu bekommen, wie der Touch-Mechanismus von UIkit aufgebaut ist. Es geht darum, was der Benutzer als touch denkt, wie Ereignisse mit der zugrunde liegenden Hardware interagieren, was alle Objekte abfangen und wie Sie die vorhandene UIkit Touch-Oberfläche zumindest konzeptionell anpassen können.

Etwas, das meine Aufmerksamkeit auf sich zog, das Sie nicht verpassen sollten, ist dies , insbesondere Eigenschaften wie timestamp , phase und previousLocationInView . (Ich erwähne nur diejenigen, die nicht sehr beliebt sind).

Am Ende weiß ich es nicht, aber Sie könnten enden Erstellen Sie Ihre eigenen benutzerdefinierten Gestenerkennung , die auf Ihre Bedürfnisse zugeschnitten sind.

UPDATE:

Obwohl für die Anforderung nicht ganz relevant,

Nirav Bhatt 23.03.2013 18:16
quelle
3

Sie sollten UILongPressGestureRecognizer verwenden ( Ссылка ), und:

  • legen Sie die minimale PressDuration auf etwas sehr kurz (z. B. 10)
  • fest
  • setze die erlaubte Bewegung auf etwas sehr großes (z.B. 500)

... jetzt haben Sie eine Geste, die „tolerant“ zu wackelig Pressen ist, etc. Ich dies bei Vorschulkindern / Kleinkindern sollten in mehreren Anwendungen verwendet habe, und es funktioniert sehr gut.

Re:. Scrollen Logik, UIScrollView ist einfach programmatisch zu steuern - wenn Sie die Dokumentation für UIScrollView und alle „delegieren“ Klassen lesen, sollten Sie alles, was Sie brauchen, um „Kontrolle“ es durch Ihre UILongPressGestureRecognizer Geste Rückruf finden

Hinweis: Sie keine benutzerdefinierte GestureRecognizer schreiben müssen - Äpfel UILongPressGestureRecognizer macht die ganze Arbeit für Sie und gibt Ihnen einen Rückruf, wenn die Geste sich bewegt; Sie reagieren darauf.

    
Adam 03.04.2013 16:42
quelle
1

Es gibt eine Reihe von Möglichkeiten, das Verhalten der Gestenerkennung ohne Unterklassen anzupassen.

Ein schneller Weg, der für einige Populationen geeignet sein kann, besteht darin, dass die Benutzer benutzerdefinierte Gesten in Einstellungen & gt; Allgemein & gt; Bedienungshilfen & gt; AssistiveTouch konfigurieren. Auf diese Weise könnte beispielsweise eine vertikale Schwenkung aufgezeichnet werden, die durch Antippen des Hilfsberührungsmenüs verwendet werden kann, wenn sie aktiviert ist.

Der Rest geht davon aus, dass Sie mehr Kontrolle wünschen als das.

Sehen Sie sich requireGestureRecognizerToFail an: Mit dieser Methode können Sie die Gestenerkenner ohne Unterklassen priorisieren, so dass beispielsweise die Schwenkgeste fehlschlägt, bevor ein Antippen erkannt wird.

Die Gestenerkenner der Bildlaufansicht sind in UIScrollView als Eigenschaften verfügbar. Sie können auch UIGestureRecognizerDelegate implementieren. Sie können das Verhalten in einer der folgenden drei Methoden anpassen: GestenRecognizerShouldBegin : GestenRecognizer: sollteReceiveTouch : GestenRecognizer: sollteRecognizeSimultanelyWithGestureRecognizer :

Ein anderer zu berücksichtigender Ansatz ist die Anpassung der Anzahl der Berührungen, die für jede Geste erforderlich sind. Wenn Sie das Minimum für eine der beiden Gesten auf zwei setzen, wird sichergestellt, dass nur der andere Erkenner aufgerufen wird, wenn nur eine Berührung erfolgt.

Bei der Steuerung auf sehr niedriger Ebene können Sie UIApplication oder UIWindow von der Unterklasse ableiten, um die Berührungseingabe an die Gestenerkenner abzufangen.

Da die Zielgruppe, auf die Sie ausgerichtet sind, möglicherweise keine identischen Funktionen aufweist, würde ich vorschlagen, diese Anpassungen mithilfe von Voreinstellungen zu konfigurieren, damit sie mit dem Benutzer abgeglichen werden können. Dies sollte wirklich eine Reihe von globalen Voreinstellungen sein, die auf Systemebene eingestellt sind, wahrscheinlich in den oben erwähnten Barrierefreiheit Einstellungen. Ich würde Sie daher ermutigen, einen Fehler bei Apple einzureichen, der genau angibt, welche Anpassungen nötig sind. und alle Referenzinformationen, die Sie bereitstellen können.

    
Steven McGrath 06.04.2013 04:46
quelle
0
___ qstnhdr ___ Wie kann ich die Sensibilität für Berührung und Ziehen ändern? ___ answer1590218 ___

Sie können natürlich benutzerdefinierte Touch-Gestenerkenner verwenden und die Touch-Gesten-Erkenner-Delegate-Methoden wie touchDidBegin oder sinRecieveTouch erfassen, solche Sachen, deren genaue Formulierungen ich nicht mehr kenne. Suchen Sie einfach nach benutzerdefinierten Touch-Gestenerkennern und Touch-Gestenerkennung-Delegaten.

    
___ answer15590393 ___

Lesen Sie zuerst dieses Handbuch vollständig (wenn nötig, zweimal oder dreimal), um eine Vorstellung davon zu bekommen, wie der Touch-Mechanismus von UIkit aufgebaut ist. Es geht darum, was der Benutzer als %code% denkt, wie Ereignisse mit der zugrunde liegenden Hardware interagieren, was alle Objekte abfangen und wie Sie die vorhandene UIkit Touch-Oberfläche zumindest konzeptionell anpassen können.

Etwas, das meine Aufmerksamkeit auf sich zog, das Sie nicht verpassen sollten, ist dies , insbesondere Eigenschaften wie %code% , %code% und %code% . (Ich erwähne nur diejenigen, die nicht sehr beliebt sind).

Am Ende weiß ich es nicht, aber Sie könnten enden Erstellen Sie Ihre eigenen benutzerdefinierten Gestenerkennung , die auf Ihre Bedürfnisse zugeschnitten sind.

UPDATE:

Obwohl für die Anforderung nicht ganz relevant,

___ qstntxt ___

Ich arbeite an einer App für eine körperlich behinderte Bevölkerung und beim Testen stellen wir fest, dass sie große Probleme mit der standardmäßigen Touch-Drag-Funktionalität haben.

Wir haben einen Bildschirm mit einem Raster von Symbolen in einem UIScrollView. Sie können ein Symbol berühren, um es zu aktivieren, und Sie können eine beliebige Stelle im Raster berühren und ziehen, einschließlich eines Symbols, um durch das Raster zu scrollen und weitere Symbole zu sehen.

In iOS ist das Standardverhalten, dass Sie in einer Bewegung berühren und ziehen. Dies erfordert eine gewisse physische Koordination, und wenn Sie berühren und pausieren und dann ziehen oder ein wenig vom Kurs abziehen, behandelt das System dies als eine einfache Berührung. Also machen unsere Tester Sachen wie:

  • Berühren Sie, halten Sie einen Moment inne und versuchen Sie dann, zu ziehen. Das Raster scrollt nicht. Wenn sie versuchten, durch Ziehen eines Symbols einen Bildlauf durchzuführen, wird beim Aktivieren der Berührung stattdessen das Symbol aktiviert.

  • Berühre, versuche, vertikal zu ziehen (die einzige unterstützte Richtung), aber wechsle zuerst ein wenig horizontal. Gleiches Ergebnis wie oben.

Die Frage ist also: Gibt es eine Möglichkeit, die Berührungsverarbeitung zu überschreiben, um mehr Toleranz für Langsamkeit oder Ziehen-Ungenauigkeit aufzubauen, so dass die App die obigen Aktionen als Bildlaufanfragen korrekt interpretiert?

    
___ answer15847098 ___

Es gibt eine Reihe von Möglichkeiten, das Verhalten der Gestenerkennung ohne Unterklassen anzupassen.

Ein schneller Weg, der für einige Populationen geeignet sein kann, besteht darin, dass die Benutzer benutzerdefinierte Gesten in Einstellungen & gt; Allgemein & gt; Bedienungshilfen & gt; AssistiveTouch konfigurieren. Auf diese Weise könnte beispielsweise eine vertikale Schwenkung aufgezeichnet werden, die durch Antippen des Hilfsberührungsmenüs verwendet werden kann, wenn sie aktiviert ist.

Der Rest geht davon aus, dass Sie mehr Kontrolle wünschen als das.

Sehen Sie sich requireGestureRecognizerToFail an: Mit dieser Methode können Sie die Gestenerkenner ohne Unterklassen priorisieren, so dass beispielsweise die Schwenkgeste fehlschlägt, bevor ein Antippen erkannt wird.

Die Gestenerkenner der Bildlaufansicht sind in UIScrollView als Eigenschaften verfügbar. Sie können auch UIGestureRecognizerDelegate implementieren. Sie können das Verhalten in einer der folgenden drei Methoden anpassen: GestenRecognizerShouldBegin : GestenRecognizer: sollteReceiveTouch : GestenRecognizer: sollteRecognizeSimultanelyWithGestureRecognizer :

Ein anderer zu berücksichtigender Ansatz ist die Anpassung der Anzahl der Berührungen, die für jede Geste erforderlich sind. Wenn Sie das Minimum für eine der beiden Gesten auf zwei setzen, wird sichergestellt, dass nur der andere Erkenner aufgerufen wird, wenn nur eine Berührung erfolgt.

Bei der Steuerung auf sehr niedriger Ebene können Sie UIApplication oder UIWindow von der Unterklasse ableiten, um die Berührungseingabe an die Gestenerkenner abzufangen.

Da die Zielgruppe, auf die Sie ausgerichtet sind, möglicherweise keine identischen Funktionen aufweist, würde ich vorschlagen, diese Anpassungen mithilfe von Voreinstellungen zu konfigurieren, damit sie mit dem Benutzer abgeglichen werden können. Dies sollte wirklich eine Reihe von globalen Voreinstellungen sein, die auf Systemebene eingestellt sind, wahrscheinlich in den oben erwähnten Barrierefreiheit Einstellungen. Ich würde Sie daher ermutigen, einen Fehler bei Apple einzureichen, der genau angibt, welche Anpassungen nötig sind. und alle Referenzinformationen, die Sie bereitstellen können.

    
___ tag123ios ___ iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die verwandten Tags [objective-c] und [swift] für Probleme, die für diese Programmiersprachen spezifisch sind. ___ answer15793213 ___

Sie sollten UILongPressGestureRecognizer verwenden ( Ссылка ), und:

  • legen Sie die minimale PressDuration auf etwas sehr kurz (z. B. 10)
  • fest
  • setze die erlaubte Bewegung auf etwas sehr großes (z.B. 500)

... jetzt haben Sie eine Geste, die „tolerant“ zu wackelig Pressen ist, etc. Ich dies bei Vorschulkindern / Kleinkindern sollten in mehreren Anwendungen verwendet habe, und es funktioniert sehr gut.

Re:. Scrollen Logik, UIScrollView ist einfach programmatisch zu steuern - wenn Sie die Dokumentation für UIScrollView und alle „delegieren“ Klassen lesen, sollten Sie alles, was Sie brauchen, um „Kontrolle“ es durch Ihre UILongPressGestureRecognizer Geste Rückruf finden

Hinweis: Sie keine benutzerdefinierte GestureRecognizer schreiben müssen - Äpfel UILongPressGestureRecognizer macht die ganze Arbeit für Sie und gibt Ihnen einen Rückruf, wenn die Geste sich bewegt; Sie reagieren darauf.

    
___ answer15880504 ___

Es stellt sich heraus, dass der Standard %code% scrolling korrekt ist, aber das Problem war einfach, dass wenn der Benutzer eine Schaltfläche berührt, die Schaltfläche das Berührungsereignis nicht die ScrollView, und das hat mich durcheinander gebracht.

Also war die Lösung für dieses Problem, zu dem ich kam, Deaktivieren die Tasten und dann die ScrollView empfängt die Berührung. Ich verwende dann eine benutzerdefinierte Unterklasse von %code% , in der ich die Methoden %code% und %code% implementiere. Bei diesen Methoden zeichne ich auf, wo der Benutzer auf und ab geht, und wenn diese sich nahe beieinander befinden und über eine (deaktivierte) Schaltfläche, mache ich dann die Aktion, die diese Schaltfläche ausführt.

Das funktioniert perfekt, aber ich denke, es ist sicherlich mehr Arbeit als nötig. Vielleicht sollte meine Frage lauten: Gibt es eine Möglichkeit, die Schaltflächen aktiviert zu lassen, aber dafür zu sorgen, dass die Bildlaufanzeige Berührungsereignisse vor ihren Unteransichten erhält, wie gewünscht rollt und dann die Ereignisse an die Unteransichten weiterleitet?

    
___
Kris Gellci 23.03.2013 18:01
quelle

Tags und Links