Skip to content

Commit 4209244

Browse files
committed
fix: N gesture override fixes and faster load/unload
1 parent e7f6a8a commit 4209244

File tree

1 file changed

+26
-57
lines changed

1 file changed

+26
-57
lines changed

src/gesturehandler/gestures_override.ts

Lines changed: 26 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export class GesturesObserver {
9292
this._target = null;
9393
this._callback = null;
9494
this._context = null;
95+
this.gestureHandler = null;
9596
}
9697
private _notifyTouch: boolean;
9798

@@ -123,8 +124,7 @@ export class GesturesObserver {
123124
private _detach() {
124125
if (this.gestureHandler) {
125126
this.gestureHandler.detachFromView(this.target);
126-
this.gestureHandler = null;
127-
delete this.target._gestureHandlers[this.type];
127+
// delete this.target._gestureHandlers[this.type];
128128
}
129129
this._notifyTouch = false;
130130
this._eventData = {};
@@ -175,107 +175,76 @@ export class GesturesObserver {
175175
}
176176
};
177177
}
178-
private _attach(
179-
target: View & {
180-
_gestureHandlers?: any;
181-
},
182-
type: GestureTypes
183-
) {
184-
this._detach();
178+
private _attach(target: View, type: GestureTypes) {
185179
if (type & GestureTypes.touch) {
186180
this._notifyTouch = true;
187181
}
188182
const manager = Manager.getInstance();
189-
if (!target._gestureHandlers) {
190-
target._gestureHandlers = {};
191-
}
192-
let gestureHandler = target._gestureHandlers[type];
183+
// if (!target._gestureHandlers) {
184+
// target._gestureHandlers = {};
185+
// }
186+
let gestureHandler = this.gestureHandler;
193187

194-
if (type & GestureTypes.tap) {
195-
if (!gestureHandler) {
188+
if (!gestureHandler) {
189+
if (type & GestureTypes.tap) {
196190
gestureHandler = manager.createGestureHandler(HandlerType.TAP, target['TAP_HANDLER_TAG'], {
197191
simultaneousHandlers: [ROOT_GESTURE_HANDLER_TAG],
198192
waitFor: [target['LONGPRESS_HANDLER_TAG'], target['DOUBLE_TAP_HANDLER_TAG']],
199193
});
200-
gestureHandler.attachToView(target);
201-
target._gestureHandlers[type] = gestureHandler;
194+
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.tap, GestureState.ACTIVE), this);
202195
}
203-
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.tap, GestureState.ACTIVE), this);
204-
}
205-
if (type & GestureTypes.longPress) {
206-
if (!gestureHandler) {
196+
if (type & GestureTypes.longPress) {
207197
gestureHandler = manager.createGestureHandler(HandlerType.LONG_PRESS, target['LONGPRESS_HANDLER_TAG'], {
208198
simultaneousHandlers: [ROOT_GESTURE_HANDLER_TAG],
209199
});
210-
gestureHandler.attachToView(target);
211-
target._gestureHandlers[type] = gestureHandler;
200+
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.longPress, GestureState.ACTIVE), this);
212201
}
213-
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.longPress, GestureState.ACTIVE), this);
214-
}
215-
if (type & GestureTypes.doubleTap) {
216-
if (!gestureHandler) {
202+
if (type & GestureTypes.doubleTap) {
217203
gestureHandler = manager.createGestureHandler(HandlerType.TAP, target['DOUBLE_TAP_HANDLER_TAG'], {
218204
numberOfTaps: 2,
219205
simultaneousHandlers: [ROOT_GESTURE_HANDLER_TAG],
220206
});
221-
gestureHandler.attachToView(target);
222-
target._gestureHandlers[type] = gestureHandler;
207+
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.doubleTap, GestureState.ACTIVE), this);
223208
}
224-
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.doubleTap, GestureState.ACTIVE), this);
225-
}
226209

227-
if (type & GestureTypes.pinch) {
228-
if (!gestureHandler) {
210+
if (type & GestureTypes.pinch) {
229211
gestureHandler = manager.createGestureHandler(HandlerType.PINCH, target['PINCH_HANDLER_TAG'], {
230212
simultaneousHandlers: [target['PAN_HANDLER_TAG'], ROOT_GESTURE_HANDLER_TAG],
231213
});
232-
gestureHandler.attachToView(target);
233-
target._gestureHandlers[type] = gestureHandler;
214+
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.pinch, GestureState.ACTIVE), this);
215+
gestureHandler.on(GestureHandlerTouchEvent, this.onGestureTouchChange(GestureTypes.pinch), this);
234216
}
235-
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.pinch, GestureState.ACTIVE), this);
236-
gestureHandler.on(GestureHandlerTouchEvent, this.onGestureTouchChange(GestureTypes.pinch), this);
237-
}
238217

239-
if (type & GestureTypes.swipe) {
240-
if (!gestureHandler) {
218+
if (type & GestureTypes.swipe) {
241219
gestureHandler = manager.createGestureHandler(HandlerType.FLING, TAG++, {
242220
simultaneousHandlers: [ROOT_GESTURE_HANDLER_TAG],
243221
});
244-
gestureHandler.attachToView(target);
245-
target._gestureHandlers[type] = gestureHandler;
222+
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.swipe, GestureState.ACTIVE), this);
246223
}
247-
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.swipe, GestureState.ACTIVE), this);
248-
}
249224

250-
if (type & GestureTypes.pan) {
251-
if (!gestureHandler) {
225+
if (type & GestureTypes.pan) {
252226
gestureHandler = manager.createGestureHandler(HandlerType.PAN, target['PAN_HANDLER_TAG'], {
253227
simultaneousHandlers: [target['PINCH_HANDLER_TAG'], ROOT_GESTURE_HANDLER_TAG],
254228
});
255-
gestureHandler.attachToView(target);
256-
target._gestureHandlers[type] = gestureHandler;
229+
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.pan, GestureState.ACTIVE), this);
230+
gestureHandler.on(GestureHandlerTouchEvent, this.onGestureTouchChange(GestureTypes.pan), this);
257231
}
258-
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.pan, GestureState.ACTIVE), this);
259-
gestureHandler.on(GestureHandlerTouchEvent, this.onGestureTouchChange(GestureTypes.pan), this);
260-
}
261232

262-
if (type & GestureTypes.rotation) {
263-
if (!gestureHandler) {
233+
if (type & GestureTypes.rotation) {
264234
gestureHandler = manager.createGestureHandler(HandlerType.ROTATION, TAG++, {
265235
simultaneousHandlers: [ROOT_GESTURE_HANDLER_TAG],
266236
});
267-
gestureHandler.attachToView(target);
268-
target._gestureHandlers[type] = gestureHandler;
237+
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.rotation, GestureState.ACTIVE), this);
238+
gestureHandler.on(GestureHandlerTouchEvent, this.onGestureTouchChange(GestureTypes.rotation), this);
269239
}
270-
gestureHandler.on(GestureHandlerStateEvent, this.onGestureStateChange(GestureTypes.rotation, GestureState.ACTIVE), this);
271-
gestureHandler.on(GestureHandlerTouchEvent, this.onGestureTouchChange(GestureTypes.rotation), this);
272240
}
273241
if (type & GestureTypes.touch && global.isIOS) {
274242
// let s not reimplement it for touch
275243
const nObserver = new NGesturesObserver(target, this.callback, this.context);
276244
nObserver.observe(type);
277245
this.nObserver = nObserver;
278246
}
247+
gestureHandler.attachToView(target);
279248
this.gestureHandler = gestureHandler;
280249
}
281250

0 commit comments

Comments
 (0)