iOS verliert Touches?

8

Ich kann nichts finden, um verlorene UITouch-Ereignisse zu erklären. Wenn Sie Ihre volle Hand oft genug auf den Bildschirm schlagen, wird die Anzahl der BerührungenBegan von der Anzahl der Berührungen abweichenEnded! Ich denke, der einzige Weg, über diese verwaisten Berührungen zu wissen, ist, sie selbst zu referenzieren und zu verfolgen, wie lange sie sich nicht bewegt haben.

Beispielcode:

%Vor%     
Joe Beuckman 16.02.2012, 23:54
quelle

3 Antworten

5

Vergessen Sie nicht touchesCancelled : UIResponder Referenz

Bearbeiten als Reaktion auf das Update des Posters:

Jedes Touch-Objekt liefert die Phase, in der es sich befindet:

%Vor%

Ich glaube, wenn eine Berührung im selben Touch-Event-Set beginnt und endet, wird -touchesBegan:withEvent: genannt, enthält jedoch Berührungen, die beendet oder abgebrochen wurden .

Sie sollten Ihren Zählcode ändern und dann so aussehen:

%Vor%

Jedes einzelne Berührungsereignis wird beide Phasen von gestartet und beendet / abgebrochen durchlaufen, und Ihre Zählungen sollten übereinstimmen, sobald Ihre Finger vom Bildschirm verschwunden sind.

    
Tim 16.02.2012 23:56
quelle
3

Eine Sache, an die Sie sich erinnern sollten ... Möglicherweise erhalten Sie einige Berührungen, die mehrere Taps haben. Vergiss nicht, tapCount zu berücksichtigen.

Wenn Sie jedoch immer noch das Problem haben, können Sie alle Berührungen von dem Ereignis berücksichtigen, obwohl es einige andere Verwaltungsprobleme ...

darstellt

HACK ALARM

Ich habe den folgenden HACK programmiert, um das zu umgehen. Manchmal werden die touchesEnded nicht aufgerufen, ABER die Berührungen werden als Teil aller Berührungen des Ereignisses angezeigt.

Beachten Sie, dass Sie die gleiche "abgebrochene" oder "beendete" Berührung jetzt mehrmals verarbeiten können. Wenn das ein Problem ist, müssen Sie Ihren eigenen Zustand der "ausstehenden" Berührungen beibehalten und sie entfernen, wenn Sie fertig sind.

Ja, alles ist ziemlich schlecht, aber ich weiß nicht, wie ich dieses Problem ohne einen ähnlichen Hack überwinden kann. Die grundlegende Lösung besteht darin, alle Berührungen in jedem Ereignis zu betrachten und sie basierend auf ihrer Phase zu verarbeiten, wobei das entsprechende beendet / abgebrochen aufgerufen wird, wenn sie gesehen werden.

%Vor%

Ruf es am Ende der Berührungen anBegan und touchesMoved ...

%Vor%

Damit dies funktioniert, muss toutsEnged / Cancelled bei einem Null-Ereignis nicht ersticken. Auch der "Andere" muss behandelt werden. In berührtEnded ...

%Vor%

und in touchesCanceled ...

%Vor%     
Jody Hagins 20.04.2012 03:23
quelle
0

Sie müssen möglicherweise mehr Details angeben, aber ....

Wenn Sie Ihren Finger vom Rand des Bildschirms bewegen, zeigt dieses Ereignis an, dass die Berührung gestartet und berührt wurde, aber kein Ende, da es nicht wirklich endete (Finger heben). Das könnte Ihr Problem sein, dass das Ereignis nicht passiert ist. Darüber hinaus gibt es eine Grenze für die Anzahl der Berührungen in Multi-Touch, wenn Sie sagen, 10 Mal ist es dann bis zum System zu bestimmen, welche Ereignisse wirklich und was falsch sind, scheint es, als ob Sie die Hardware falsch verwenden.

    
Dev2rights 26.04.2012 09:23
quelle

Tags und Links