2009-05-27 12 views
1

Ich mache Usability-Tests und möchte alle Benutzereingabeereignisse protokollieren: Mausbewegungen, Klicks, Ziehen und Tastatureingabe. Ich habe nicht viel Glück herauszufinden, wie, oder einen Code dafür zu finden. Irgendwelche Hinweise? Ich habe mir die CoreGraphics EventTap-Mechanismen angeschaut, aber ich befürchte, dass es zu niedrig ist. Ich würde gerne wissen, auf welche bestimmten UI-Elemente der Benutzer klickt.Alle Kakaoereignisse protokollieren?

bearbeiten zu klären:

Ich Usability-Tests zu tun, so will ich verfolgen, was Teile der Schnittstelle halten verwendet der Benutzer und verwendet nicht. Also, ich möchte den Überblick behalten "Button 'foo' wurde 7 Mal bei diesen bestimmten Zeitstempeln geklickt, der Benutzer scrollte durch diese Liste und wählte das und das und so weiter."

Antwort

3

Wenn Sie nur suchen, um sie für Ihre Anwendung zu verfolgen, können Sie -[NSApplication sendEvent:] überschreiben. Es ist verantwortlich für die Verteilung aller Ereignisse, die Ihre Anwendung an die entsprechenden Responder erhält.

+1

Hm, es scheint, dass mein Kommentar verschwunden ist. Zur Wiederholung: Wenn ich etwas nicht verpasse, enthält das, was ich von sendEvent bekomme, keine Details darüber, auf welches Oberflächenelement geklickt wurde. Ich scheine nur ein NSEvent zu bekommen, das mir mitteilt, dass "location (x, y) im Fenster angeklickt wurde", ohne zu wissen, welche Taste, Ansicht usw. angeklickt wurde. – Dan

0

Das ist völlig anders als das, worüber Sie gerade nachdenken, aber betrachten Sie etwas wie Silverback, wenn Sie noch nicht haben.

+0

Danke für den Tipp; Ich verwende ScreenFlow, um eine Bildschirmaufnahme zu machen. – Dan

2

Ich denke, Sie müssen eine Menge von swizzling tun.

Zuerst Swizzling tryToPerform:with:; Wenn das nicht funktioniert, müssen Sie Methoden wie mouseDown:, mouseUp:, die Ziehereignismethoden keyDown:, keyUp: und the undocumented gesture methods austauschen.

Eine Komplikation in der letzteren Lösung ist, dass Sie diese Methoden auf nicht nur NSResponder, sondern auf mehrere seiner Unterklassen swizzle müssen, weil viele Ansicht Klassen ihre eigenen Implementierungen bieten, die ihre möglicherweise aufrufen oder nicht Vorfahrenimplementierungen.

+0

Ja, nicht gut mit tryToPerform: mit :. Ich bekomme überhaupt nichts. Meine ursprüngliche Lösung umfasste tatsächlich den Versuch, mouseDown zu vertauschen: usw., aber, wie Sie sagen, rufen viele der nachgeschalteten Responder nicht zur übergeordneten Methode zurück. Ich denke, das bedeutet im Idealfall, herauszufinden, alle UI-Klassen im Einsatz und automatisch swizzled sie alle. Das ist wahrscheinlich eine andere Frage. – Dan

1

In Instruments können Benutzeroberflächenereignisse aufgezeichnet werden. Es scheint, als könnten Sie die Dtrace-Aufrufe, die Ihnen zugrunde liegen, verwenden, um das zu erreichen, was Sie anstreben.

Verwandte Themen