From 283d93f32d247f70d494077469dd6b5886463f63 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Tue, 21 Apr 2015 15:44:56 +0300 Subject: [PATCH] Fixed: Swipe gesture is not recognized by Page. #301 --- ui/gestures/gestures.ios.ts | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/ui/gestures/gestures.ios.ts b/ui/gestures/gestures.ios.ts index e265486a0..ed6aa9ce1 100644 --- a/ui/gestures/gestures.ios.ts +++ b/ui/gestures/gestures.ios.ts @@ -66,9 +66,8 @@ export class GesturesObserver implements definition.GesturesObserver { this.disconnect(); this._target = target; - - if (this._target && this._target.ios && this._target.ios.addGestureRecognizer) { - var nativeView = this._target.ios; + if (this._target && this._target._nativeView && this._target._nativeView.addGestureRecognizer) { + var nativeView = this._target._nativeView; if (type & definition.GestureTypes.tap) { nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.tap)); @@ -89,14 +88,26 @@ export class GesturesObserver implements definition.GesturesObserver { if (type & definition.GestureTypes.pan) { nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.pan, args => { - this._executeCallback(_getPanData(args, this._target.ios)); + this._executeCallback(_getPanData(args, this._target._nativeView)); })); } if (type & definition.GestureTypes.swipe) { nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.swipe, args => { this._executeCallback(_getSwipeData(args)); - })); + }, UISwipeGestureRecognizerDirection.UISwipeGestureRecognizerDirectionDown)); + + nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.swipe, args => { + this._executeCallback(_getSwipeData(args)); + }, UISwipeGestureRecognizerDirection.UISwipeGestureRecognizerDirectionLeft)); + + nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.swipe, args => { + this._executeCallback(_getSwipeData(args)); + }, UISwipeGestureRecognizerDirection.UISwipeGestureRecognizerDirectionRight)); + + nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.swipe, args => { + this._executeCallback(_getSwipeData(args)); + }, UISwipeGestureRecognizerDirection.UISwipeGestureRecognizerDirectionUp)); } if (type & definition.GestureTypes.rotation) { @@ -112,12 +123,12 @@ export class GesturesObserver implements definition.GesturesObserver { } public disconnect() { - if (this._target && this._target.ios) { + if (this._target && this._target._nativeView) { for (var name in this._recognizers) { if (this._recognizers.hasOwnProperty(name)) { var item = this._recognizers[name]; - this._target.ios.removeGestureRecognizer(item.recognizer); + this._target._nativeView.removeGestureRecognizer(item.recognizer); item.recognizer = null; item.target = null; @@ -136,14 +147,22 @@ export class GesturesObserver implements definition.GesturesObserver { } } - private _createRecognizer(type: definition.GestureTypes, callback?: (args: definition.GestureEventData) => void): UIGestureRecognizer { + private _createRecognizer(type: definition.GestureTypes, callback?: (args: definition.GestureEventData) => void, swipeDirection?: UISwipeGestureRecognizerDirection): UIGestureRecognizer { var recognizer: UIGestureRecognizer; var name = definition.toString(type); var target = _createUIGestureRecognizerTarget(this, type, callback); var recognizerType = _getUIGestureRecognizerType(type); if (recognizerType) { - recognizer = recognizerType.alloc().initWithTargetAction(target, "recognize"); + if (type === definition.GestureTypes.swipe && swipeDirection) { + name = name + swipeDirection.toString(); + recognizer = recognizerType.alloc().initWithTargetAction(target, "recognize"); + (recognizer).direction = swipeDirection; + } + else { + recognizer = recognizerType.alloc().initWithTargetAction(target, "recognize"); + } + if (recognizer) { this._recognizers[name] = { recognizer: recognizer, target: target }; }