mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00

* chore: move tns-core-modules to nativescript-core * chore: preparing compat generate script * chore: add missing definitions * chore: no need for http-request to be private * chore: packages chore * test: generate tests for tns-core-modules * chore: add anroid module for consistency * chore: add .npmignore * chore: added privateModulesWhitelist * chore(webpack): added bundle-entry-points * chore: scripts * chore: tests changed to use @ns/core * test: add scoped-packages test project * test: fix types * test: update test project * chore: build scripts * chore: update build script * chore: npm scripts cleanup * chore: make the compat pgk work with old wp config * test: generate diff friendly tests * chore: create barrel exports * chore: move files after rebase * chore: typedoc config * chore: compat mode * chore: review of barrels * chore: remove tns-core-modules import after rebase * chore: dev workflow setup * chore: update developer-workflow * docs: experiment with API extractor * chore: api-extractor and barrel exports * chore: api-extractor configs * chore: generate d.ts rollup with api-extractor * refactor: move methods inside Frame * chore: fic tests to use Frame static methods * refactor: create Builder class * refactor: use Builder class in tests * refactor: include Style in ui barrel * chore: separate compat build script * chore: fix tslint errors * chore: update NATIVESCRIPT_CORE_ARGS * chore: fix compat pack * chore: fix ui-test-app build with linked modules * chore: Application, ApplicationSettings, Connectivity and Http * chore: export Trace, Profiling and Utils * refactor: Static create methods for ImageSource * chore: fix deprecated usages of ImageSource * chore: move Span and FormattedString to ui * chore: add events-args and ImageSource to index files * chore: check for CLI >= 6.2 when building for IOS * chore: update travis build * chore: copy Pod file to compat package * chore: update error msg ui-tests-app * refactor: Apply suggestions from code review Co-Authored-By: Martin Yankov <m.i.yankov@gmail.com> * chore: typings and refs * chore: add missing d.ts files for public API * chore: adress code review FB * chore: update api-report * chore: dev-workflow for other apps * chore: api update * chore: update api-report
90 lines
4.1 KiB
TypeScript
90 lines
4.1 KiB
TypeScript
import { NavigationTransition } from "./frame";
|
|
import { Transition } from "../transition/transition";
|
|
import { SlideTransition } from "../transition/slide-transition";
|
|
import { FadeTransition } from "../transition/fade-transition";
|
|
|
|
import { isEnabled as traceEnabled, write as traceWrite, categories as traceCategories } from "../../trace";
|
|
|
|
module UIViewControllerAnimatedTransitioningMethods {
|
|
const methodSignature = NSMethodSignature.signatureWithObjCTypes("v@:c");
|
|
const invocation = NSInvocation.invocationWithMethodSignature(methodSignature);
|
|
invocation.selector = "completeTransition:";
|
|
|
|
export function completeTransition(didComplete: boolean) {
|
|
const didCompleteReference = new interop.Reference(interop.types.bool, didComplete);
|
|
invocation.setArgumentAtIndex(didCompleteReference, 2);
|
|
invocation.invokeWithTarget(this);
|
|
}
|
|
}
|
|
|
|
class AnimatedTransitioning extends NSObject implements UIViewControllerAnimatedTransitioning {
|
|
public static ObjCProtocols = [UIViewControllerAnimatedTransitioning];
|
|
|
|
private _transition: Transition;
|
|
private _operation: UINavigationControllerOperation;
|
|
private _fromVC: UIViewController;
|
|
private _toVC: UIViewController;
|
|
private _transitionType: string;
|
|
|
|
public static init(transition: Transition, operation: UINavigationControllerOperation, fromVC: UIViewController, toVC: UIViewController): AnimatedTransitioning {
|
|
const impl = <AnimatedTransitioning>AnimatedTransitioning.new();
|
|
impl._transition = transition;
|
|
impl._operation = operation;
|
|
impl._fromVC = fromVC;
|
|
impl._toVC = toVC;
|
|
|
|
return impl;
|
|
}
|
|
|
|
public animateTransition(transitionContext: any): void {
|
|
const containerView = transitionContext.valueForKey("containerView");
|
|
const completion = UIViewControllerAnimatedTransitioningMethods.completeTransition.bind(transitionContext);
|
|
switch (this._operation) {
|
|
case UINavigationControllerOperation.Push: this._transitionType = "push"; break;
|
|
case UINavigationControllerOperation.Pop: this._transitionType = "pop"; break;
|
|
case UINavigationControllerOperation.None: this._transitionType = "none"; break;
|
|
}
|
|
|
|
if (traceEnabled()) {
|
|
traceWrite(`START ${this._transition} ${this._transitionType}`, traceCategories.Transition);
|
|
}
|
|
this._transition.animateIOSTransition(containerView, this._fromVC.view, this._toVC.view, this._operation, completion);
|
|
}
|
|
|
|
public transitionDuration(transitionContext: UIViewControllerContextTransitioning): number {
|
|
return this._transition.getDuration();
|
|
}
|
|
|
|
public animationEnded(transitionCompleted: boolean): void {
|
|
if (transitionCompleted) {
|
|
if (traceEnabled()) {
|
|
traceWrite(`END ${this._transition} ${this._transitionType}`, traceCategories.Transition);
|
|
}
|
|
} else {
|
|
if (traceEnabled()) {
|
|
traceWrite(`CANCEL ${this._transition} ${this._transitionType}`, traceCategories.Transition);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export function _createIOSAnimatedTransitioning(navigationTransition: NavigationTransition, nativeCurve: UIViewAnimationCurve, operation: UINavigationControllerOperation, fromVC: UIViewController, toVC: UIViewController): UIViewControllerAnimatedTransitioning {
|
|
const instance = navigationTransition.instance;
|
|
let transition: Transition;
|
|
|
|
if (instance) {
|
|
// Instance transition should take precedence even if the given name match existing transition.
|
|
transition = instance;
|
|
} else if (navigationTransition.name) {
|
|
const name = navigationTransition.name.toLowerCase();
|
|
if (name.indexOf("slide") === 0) {
|
|
const direction = name.substr("slide".length) || "left"; //Extract the direction from the string
|
|
transition = new SlideTransition(direction, navigationTransition.duration, nativeCurve);
|
|
} else if (name === "fade") {
|
|
transition = new FadeTransition(navigationTransition.duration, nativeCurve);
|
|
}
|
|
}
|
|
|
|
return transition ? AnimatedTransitioning.init(transition, operation, fromVC, toVC) : undefined;
|
|
}
|