mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
63 lines
2.7 KiB
TypeScript
63 lines
2.7 KiB
TypeScript
import transition = require("ui/transition");
|
|
import platform = require("platform");
|
|
|
|
var screenWidth = platform.screen.mainScreen.widthDIPs;
|
|
var screenHeight = platform.screen.mainScreen.heightDIPs;
|
|
var leftEdge = CGAffineTransformMakeTranslation(-screenWidth, 0);
|
|
var rightEdge = CGAffineTransformMakeTranslation(screenWidth, 0);
|
|
var topEdge = CGAffineTransformMakeTranslation(0, -screenHeight);
|
|
var bottomEdge = CGAffineTransformMakeTranslation(0, screenHeight);
|
|
|
|
export class SlideTransition extends transition.Transition {
|
|
private _direction: string;
|
|
|
|
constructor(direction: string, duration: number, curve: any) {
|
|
super(duration, curve);
|
|
this._direction = direction;
|
|
}
|
|
|
|
public animateIOSTransition(containerView: UIView, fromView: UIView, toView: UIView, operation: UINavigationControllerOperation, completion: (finished: boolean) => void): void {
|
|
var fromViewEndTransform: CGAffineTransform;
|
|
var toViewBeginTransform: CGAffineTransform;
|
|
var push = (operation === UINavigationControllerOperation.UINavigationControllerOperationPush);
|
|
|
|
switch (this._direction) {
|
|
case "left":
|
|
toViewBeginTransform = push ? rightEdge : leftEdge;
|
|
fromViewEndTransform = push ? leftEdge : rightEdge;
|
|
break;
|
|
case "right":
|
|
toViewBeginTransform = push ? leftEdge : rightEdge;
|
|
fromViewEndTransform = push ? rightEdge : leftEdge;
|
|
break;
|
|
case "top":
|
|
toViewBeginTransform = push ? bottomEdge : topEdge;
|
|
fromViewEndTransform = push ? topEdge : bottomEdge;
|
|
break;
|
|
case "bottom":
|
|
toViewBeginTransform = push ? topEdge : bottomEdge;
|
|
fromViewEndTransform = push ? bottomEdge : topEdge;
|
|
break;
|
|
}
|
|
|
|
toView.transform = toViewBeginTransform;
|
|
fromView.transform = CGAffineTransformIdentity;
|
|
|
|
switch (operation) {
|
|
case UINavigationControllerOperation.UINavigationControllerOperationPush:
|
|
containerView.insertSubviewAboveSubview(toView, fromView);
|
|
break;
|
|
case UINavigationControllerOperation.UINavigationControllerOperationPop:
|
|
containerView.insertSubviewBelowSubview(toView, fromView);
|
|
break;
|
|
}
|
|
|
|
var duration = this.getDuration();
|
|
var curve = this.getCurve();
|
|
UIView.animateWithDurationAnimationsCompletion(duration, () => {
|
|
UIView.setAnimationCurve(curve);
|
|
toView.transform = CGAffineTransformIdentity;
|
|
fromView.transform = fromViewEndTransform;
|
|
}, completion);
|
|
}
|
|
} |