Ich brauche einige Tasten, die zur gleichen Zeit gedrückt werden können, aber derzeit, wenn Sie eine drücken, es "reklamiert" Reaktionsfähigkeit und die anderen können nicht mehr gedrückt werden. Wie mache ich das?Mehrere Geste Responder gleichzeitig
3
A
Antwort
1
Verstanden. Sie müssen ReactNativeEventEmitter
verwenden, um direkt auf Berührungsereignisse zu hören und das Gesture Responder-Material vollständig zu umgehen. Unten ist eine Decorator-Klasse, die onTouchStart
, onTouchEnd
und onTouchMove
in der umschlossenen Klasse aufruft, wenn diese Berührungsereignisse empfangen werden.
'use strict';
import React, {Component} from 'react-native';
import ReactNativeEventEmitter from 'ReactNativeEventEmitter';
import NodeHandle from 'NodeHandle';
export const multitouchable = BaseComponent => {
return class extends Component {
constructor(props, context) {
super(props, context);
this.comp = null;
this.compId = null;
}
componentDidMount() {
if(this.comp && this.compId){
this.comp.onTouchStart && ReactNativeEventEmitter.putListener(this.compId, 'onTouchStart', e => this.comp.onTouchStart(e));
this.comp.onTouchEnd && ReactNativeEventEmitter.putListener(this.compId, 'onTouchEnd', e => this.comp.onTouchEnd(e));
this.comp.onTouchMove && ReactNativeEventEmitter.putListener(this.compId, 'onTouchMove', e => this.comp.onTouchMove(e));
}
}
componentWillUnmount() {
if(this.comp && this.compId){
this.comp.onTouchStart && ReactNativeEventEmitter.deleteListener(this.compId, 'onTouchStart');
this.comp.onTouchEnd && ReactNativeEventEmitter.deleteListener(this.compId, 'onTouchEnd');
this.comp.onTouchMove && ReactNativeEventEmitter.deleteListener(this.compId, 'onTouchMove');
}
}
render() {
return (
<BaseComponent {...this.props} {...this.state}
ref={c => {
this.comp = c;
const handle = React.findNodeHandle(c);
if(handle)
this.compId = NodeHandle.getRootNodeID(handle);
}}
/>
);
}
};
}
Verwandte Themen
- 1. First Responder
- 2. Mehrere Listenfelder gleichzeitig scrollen?
- 3. Mehrere Indizes gleichzeitig erstellen
- 4. Mehrere Eventlistener gleichzeitig hinzufügen
- 5. Mehrere Tasten gleichzeitig drücken
- 6. Mehrere Ganzzahlen gleichzeitig drucken
- 7. Tomcat mehrere Instanzen gleichzeitig
- 8. Mehrere Lösungsplattformen gleichzeitig erstellen?
- 9. Mehrere Junit-Testfälle gleichzeitig
- 10. Mehrere Maschinen - mehrere Dateien gleichzeitig verarbeiten?
- 11. NSTextField resigning first responder
- 12. Aktuellen Responder überprüfen?
- 13. Layout von Responder setzen?
- 14. Gesten und Responder-Kette
- 15. Tippen Geste auf mehrere Bildansicht in Scrollview nicht feuern Ereignis, nur erste Imageview tippen Geste arbeiten?
- 16. Mehrere Emacs-Infodateien gleichzeitig lesen
- 17. Django Mehrere Attribute gleichzeitig rendern?
- 18. Node.js ersetzen mehrere Zeichenfolgen gleichzeitig
- 19. Werden mehrere Variablenzuordnungen gleichzeitig ausgeführt?
- 20. Mehrere R-Skripte gleichzeitig ausführen
- 21. scheint jQuery mehrere Anrufe gleichzeitig
- 22. Mehrere REST-Aufrufe gleichzeitig senden
- 23. Gefährlich mehrere Sprachen gleichzeitig lernen?
- 24. Scrollen Sie mehrere div gleichzeitig
- 25. Mehrere Tensorflow-Sitzungen gleichzeitig ausführen
- 26. Mehrere mySQL-Datumsfelder gleichzeitig formatieren
- 27. Mehrere Unittest-Testdateien gleichzeitig ausführen
- 28. Mehrere YouTube-Videos gleichzeitig stummschalten
- 29. eclipse: Mehrere Startkonfigurationen gleichzeitig ausführen
- 30. Perl ersetzen mehrere Zeichenfolgen gleichzeitig
Dies hat mir definitiv geholfen, aber funktioniert es für Sie für die neueste Version von reagieren native? (0.27) Sieht so aus, als ob NodeHandle nicht mehr existiert, es wurde durch findNodeHandle ersetzt, aber das liefert Integer anstelle von Objekt, das als erster Parameter für die ReactNativeEventEmitter.putListener-Methode erwartet wird. Sie können jedoch ein Objekt mit dem Schlüssel _rootNodeID erstellen und dieses an putListener übergeben. Dann hat es für mich funktioniert. – OndrejRohon