Merge pull request #302 from NativeScript/swipe

Fixed:  Swipe gesture is not recognized by Page. #301
This commit is contained in:
Rossen Hristov
2015-04-21 15:52:16 +03:00

View File

@ -66,9 +66,8 @@ export class GesturesObserver implements definition.GesturesObserver {
this.disconnect(); this.disconnect();
this._target = target; this._target = target;
if (this._target && this._target._nativeView && this._target._nativeView.addGestureRecognizer) {
if (this._target && this._target.ios && this._target.ios.addGestureRecognizer) { var nativeView = <UIView>this._target._nativeView;
var nativeView = <UIView>this._target.ios;
if (type & definition.GestureTypes.tap) { if (type & definition.GestureTypes.tap) {
nativeView.addGestureRecognizer(this._createRecognizer(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) { if (type & definition.GestureTypes.pan) {
nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.pan, args => { 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) { if (type & definition.GestureTypes.swipe) {
nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.swipe, args => { nativeView.addGestureRecognizer(this._createRecognizer(definition.GestureTypes.swipe, args => {
this._executeCallback(_getSwipeData(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) { if (type & definition.GestureTypes.rotation) {
@ -112,12 +123,12 @@ export class GesturesObserver implements definition.GesturesObserver {
} }
public disconnect() { public disconnect() {
if (this._target && this._target.ios) { if (this._target && this._target._nativeView) {
for (var name in this._recognizers) { for (var name in this._recognizers) {
if (this._recognizers.hasOwnProperty(name)) { if (this._recognizers.hasOwnProperty(name)) {
var item = <RecognizerCache>this._recognizers[name]; var item = <RecognizerCache>this._recognizers[name];
this._target.ios.removeGestureRecognizer(item.recognizer); this._target._nativeView.removeGestureRecognizer(item.recognizer);
item.recognizer = null; item.recognizer = null;
item.target = 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 recognizer: UIGestureRecognizer;
var name = definition.toString(type); var name = definition.toString(type);
var target = _createUIGestureRecognizerTarget(this, type, callback); var target = _createUIGestureRecognizerTarget(this, type, callback);
var recognizerType = _getUIGestureRecognizerType(type); var recognizerType = _getUIGestureRecognizerType(type);
if (recognizerType) { if (recognizerType) {
recognizer = recognizerType.alloc().initWithTargetAction(target, "recognize"); if (type === definition.GestureTypes.swipe && swipeDirection) {
name = name + swipeDirection.toString();
recognizer = recognizerType.alloc().initWithTargetAction(target, "recognize");
(<UISwipeGestureRecognizer>recognizer).direction = swipeDirection;
}
else {
recognizer = recognizerType.alloc().initWithTargetAction(target, "recognize");
}
if (recognizer) { if (recognizer) {
this._recognizers[name] = <RecognizerCache>{ recognizer: recognizer, target: target }; this._recognizers[name] = <RecognizerCache>{ recognizer: recognizer, target: target };
} }