import transition = require("ui/transition"); import platform = require("platform"); let screenWidth = platform.screen.mainScreen.widthDIPs; let screenHeight = platform.screen.mainScreen.heightDIPs; let leftEdge = CGAffineTransformMakeTranslation(-screenWidth, 0); let rightEdge = CGAffineTransformMakeTranslation(screenWidth, 0); let topEdge = CGAffineTransformMakeTranslation(0, -screenHeight); let 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 { let originalToViewTransform = toView.transform; let originalFromViewTransform = fromView.transform; let fromViewEndTransform: CGAffineTransform; let toViewBeginTransform: CGAffineTransform; let 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; } let duration = this.getDuration(); let curve = this.getCurve(); UIView.animateWithDurationAnimationsCompletion(duration, () => { UIView.setAnimationCurve(curve); toView.transform = CGAffineTransformIdentity; fromView.transform = fromViewEndTransform; }, (finished: boolean) => { toView.transform = originalToViewTransform; fromView.transform = originalFromViewTransform; completion(finished); }); } }