Optimizations

This commit is contained in:
vakrilov
2016-01-18 13:49:50 +02:00
parent d43e9546d8
commit 7303755cc9
3 changed files with 52 additions and 30 deletions

View File

@ -21,6 +21,8 @@ export class GesturesObserver extends common.GesturesObserver {
private _panGestureDetector: CustomPanGestureDetector;
private _rotateGestureDetector: CustomRotateGestureDetector;
private _eventData: TouchGestureEventData;
private _onTargetLoaded: (data: observable.EventData) => void;
private _onTargetUnloaded: (data: observable.EventData) => void;
@ -62,12 +64,13 @@ export class GesturesObserver extends common.GesturesObserver {
private _detach() {
trace.write(this.target + "._detach() android:" + this.target._nativeView, "gestures");
this._notifyTouch = false
this._simpleGestureDetector = null;
this._scaleGestureDetector = null;
this._swipeGestureDetector = null;
this._panGestureDetector = null;
this._rotateGestureDetector = null;
this._notifyTouch = false
this._eventData = null;
}
private _attach(target: view.View, type: definition.GestureTypes) {
@ -101,7 +104,12 @@ export class GesturesObserver extends common.GesturesObserver {
public androidOnTouchEvent(motionEvent: android.view.MotionEvent) {
if (this._notifyTouch) {
_executeCallback(this, new TouchGestureEventData(this.target, motionEvent));
if (!this._eventData) {
this._eventData = new TouchGestureEventData();
}
this._eventData.prepare(this.target, motionEvent);
_executeCallback(this, this._eventData);
}
if (this._simpleGestureDetector) {
@ -604,22 +612,24 @@ class Pointer implements definition.Pointer {
class TouchGestureEventData implements definition.TouchGestureEventData {
eventName: string = definition.toString(definition.GestureTypes.touch);
action: string;
type: definition.GestureTypes = definition.GestureTypes.touch;
view: view.View;
ios: any = undefined;
action: string;
view: view.View;
android: android.view.MotionEvent;
object: any;
private _activePointers: Array<Pointer>;
private _allPointers: Array<Pointer>;
constructor(view: view.View, e: android.view.MotionEvent) {
public prepare(view: view.View, e: android.view.MotionEvent) {
this.view = view;
this.object = view;
this.android = e;
this.action = this.getActionType(e);
this._activePointers = undefined;
this._allPointers = undefined;
}
getPointerCount(): number {

View File

@ -240,9 +240,11 @@ declare module "ui/gestures" {
export class GesturesObserver {
/**
* Creates an instance of GesturesObserver class.
* @param target - The view for which the observer is created.
* @param callback - A function that will be executed when a gesture is received.
* @param context - default this argument for the callbacks.
*/
constructor(target: view.View, callback: (args: GestureEventData) => void, thisArg: any);
constructor(target: view.View, callback: (args: GestureEventData) => void, context: any);
/**
* Registers a gesture observer to a view and gesture.
@ -281,8 +283,9 @@ declare module "ui/gestures" {
* @param target - View which will be watched for originating a specific gesture.
* @param type - Type of the gesture.
* @param callback - A function that will be executed when a gesture is received.
* @param context - this argument for the callback.
*/
export function observe(target: view.View, type: GestureTypes, callback: (args: GestureEventData) => void, thisArg?: any): GesturesObserver;
export function observe(target: view.View, type: GestureTypes, callback: (args: GestureEventData) => void, context?: any): GesturesObserver;
/**
* Returns a string representation of a gesture type.

View File

@ -342,6 +342,7 @@ function _getRotationData(args: definition.GestureEventData): definition.Rotatio
class TouchGestureRecognizer extends UIGestureRecognizer {
public observer: GesturesObserver;
private _eventData: TouchGestureEventData;
touchesBeganWithEvent(touches: NSSet, event: any): void {
this.executeCallback(common.TouchAction.down, touches, event);
@ -360,8 +361,12 @@ class TouchGestureRecognizer extends UIGestureRecognizer {
}
private executeCallback(action: string, touches: NSSet, event: any): void {
var args = new TouchGestureEventData(this.observer.target, action, touches, event);
this.observer._executeCallback(args);
if (!this._eventData) {
this._eventData = new TouchGestureEventData();
}
this._eventData.prepare(this.observer.target, action, touches, event);
this.observer._executeCallback(this._eventData);
}
}
@ -396,43 +401,47 @@ class Pointer implements definition.Pointer {
class TouchGestureEventData implements definition.TouchGestureEventData {
eventName: string = definition.toString(definition.GestureTypes.touch);
action: string;
type: definition.GestureTypes = definition.GestureTypes.touch;
android: any = undefined;
action: string;
view: view.View;
ios: { touches: NSSet, event: { allTouches: () => NSSet } };
android: any = undefined;
object: any;
private _allPinters: Array<Pointer>;
private _activePointers: Array<Pointer>;
private _allPointers: Array<Pointer>;
private _mainPointer: UITouch;
private get mainPointer(): UITouch {
if (types.isUndefined(this._mainPointer)) {
this._mainPointer = this.ios.touches.anyObject();
}
return this._mainPointer;
}
constructor(view: view.View, action: string, touches: NSSet, event: any) {
public prepare(view: view.View, action: string, touches: NSSet, event: any) {
this.action = action;
this.view = view;
this.object = view;
this.action = action;
this.ios = {
touches: touches,
event: event
};
this._mainPointer = undefined;
this._activePointers = undefined;
this._allPointers = undefined;
}
getPointerCount(): number {
return this.ios.event.allTouches().count;
}
private getMainPointer(): UITouch {
if (types.isUndefined(this._mainPointer)) {
this._mainPointer = this.ios.touches.anyObject();
}
return this._mainPointer;
}
getActivePointers(): Array<Pointer> {
if (!this._activePointers) {
this._activePointers = [];
let nsArr = this.ios.touches.allObjects;
for (var i = 0; i < nsArr.count; i++) {
for (let i = 0, nsArr = this.ios.touches.allObjects; i < nsArr.count; i++) {
this._activePointers.push(new Pointer(nsArr.objectAtIndex(i), this.view));
}
}
@ -441,23 +450,23 @@ class TouchGestureEventData implements definition.TouchGestureEventData {
}
getAllPointers(): Array<Pointer> {
if (!this._allPinters) {
this._allPinters = [];
if (!this._allPointers) {
this._allPointers = [];
let nsArr = this.ios.event.allTouches().allObjects;
for (var i = 0; i < nsArr.count; i++) {
this._allPinters.push(new Pointer(nsArr.objectAtIndex(i), this.view));
this._allPointers.push(new Pointer(nsArr.objectAtIndex(i), this.view));
}
}
return this._allPinters;
return this._allPointers;
}
getX(): number {
return this.mainPointer.locationInView(this.view._nativeView).x;
return this.getMainPointer().locationInView(this.view._nativeView).x;
}
getY(): number {
return this.mainPointer.locationInView(this.view._nativeView).y
return this.getMainPointer().locationInView(this.view._nativeView).y
}
}