Merge pull request #2286 from NativeScript/transitions

Fixed a visual glitch with manual iOS transitions
This commit is contained in:
Rossen Hristov
2016-06-13 09:09:33 +03:00
committed by GitHub
3 changed files with 34 additions and 16 deletions

View File

@@ -77,6 +77,10 @@ export class Frame extends frameCommon.Frame {
throw new Error("Required page does not have a viewController created."); throw new Error("Required page does not have a viewController created.");
} }
let clearHistory = backstackEntry.entry.clearHistory;
if (clearHistory) {
navDepth = -1;
}
navDepth++; navDepth++;
let navigationTransition: definition.NavigationTransition; let navigationTransition: definition.NavigationTransition;
@@ -117,7 +121,7 @@ export class Frame extends frameCommon.Frame {
} }
// We should clear the entire history. // We should clear the entire history.
if (backstackEntry.entry.clearHistory) { if (clearHistory) {
viewController.navigationItem.hidesBackButton = true; viewController.navigationItem.hidesBackButton = true;
var newControllers = NSMutableArray.alloc().initWithCapacity(1); var newControllers = NSMutableArray.alloc().initWithCapacity(1);
newControllers.addObject(viewController); newControllers.addObject(viewController);

View File

@@ -2,6 +2,9 @@
export class FadeTransition extends transition.Transition { export class FadeTransition extends transition.Transition {
public animateIOSTransition(containerView: UIView, fromView: UIView, toView: UIView, operation: UINavigationControllerOperation, completion: (finished: boolean) => void): void { public animateIOSTransition(containerView: UIView, fromView: UIView, toView: UIView, operation: UINavigationControllerOperation, completion: (finished: boolean) => void): void {
let originalToViewAlpha = toView.alpha;
let originalFromViewAlpha = fromView.alpha;
toView.alpha = 0.0; toView.alpha = 0.0;
fromView.alpha = 1.0; fromView.alpha = 1.0;
@@ -14,12 +17,16 @@ export class FadeTransition extends transition.Transition {
break; break;
} }
var duration = this.getDuration(); let duration = this.getDuration();
var curve = this.getCurve(); let curve = this.getCurve();
UIView.animateWithDurationAnimationsCompletion(duration, () => { UIView.animateWithDurationAnimationsCompletion(duration, () => {
UIView.setAnimationCurve(curve); UIView.setAnimationCurve(curve);
toView.alpha = 1.0; toView.alpha = 1.0;
fromView.alpha = 0.0; fromView.alpha = 0.0;
}, completion); }, (finished: boolean) => {
toView.alpha = originalToViewAlpha;
fromView.alpha = originalFromViewAlpha;
completion(finished);
});
} }
} }

View File

@@ -1,12 +1,12 @@
import transition = require("ui/transition"); import transition = require("ui/transition");
import platform = require("platform"); import platform = require("platform");
var screenWidth = platform.screen.mainScreen.widthDIPs; let screenWidth = platform.screen.mainScreen.widthDIPs;
var screenHeight = platform.screen.mainScreen.heightDIPs; let screenHeight = platform.screen.mainScreen.heightDIPs;
var leftEdge = CGAffineTransformMakeTranslation(-screenWidth, 0); let leftEdge = CGAffineTransformMakeTranslation(-screenWidth, 0);
var rightEdge = CGAffineTransformMakeTranslation(screenWidth, 0); let rightEdge = CGAffineTransformMakeTranslation(screenWidth, 0);
var topEdge = CGAffineTransformMakeTranslation(0, -screenHeight); let topEdge = CGAffineTransformMakeTranslation(0, -screenHeight);
var bottomEdge = CGAffineTransformMakeTranslation(0, screenHeight); let bottomEdge = CGAffineTransformMakeTranslation(0, screenHeight);
export class SlideTransition extends transition.Transition { export class SlideTransition extends transition.Transition {
private _direction: string; private _direction: string;
@@ -17,9 +17,12 @@ export class SlideTransition extends transition.Transition {
} }
public animateIOSTransition(containerView: UIView, fromView: UIView, toView: UIView, operation: UINavigationControllerOperation, completion: (finished: boolean) => void): void { public animateIOSTransition(containerView: UIView, fromView: UIView, toView: UIView, operation: UINavigationControllerOperation, completion: (finished: boolean) => void): void {
var fromViewEndTransform: CGAffineTransform; let originalToViewTransform = toView.transform;
var toViewBeginTransform: CGAffineTransform; let originalFromViewTransform = fromView.transform;
var push = (operation === UINavigationControllerOperation.UINavigationControllerOperationPush);
let fromViewEndTransform: CGAffineTransform;
let toViewBeginTransform: CGAffineTransform;
let push = (operation === UINavigationControllerOperation.UINavigationControllerOperationPush);
switch (this._direction) { switch (this._direction) {
case "left": case "left":
@@ -52,12 +55,16 @@ export class SlideTransition extends transition.Transition {
break; break;
} }
var duration = this.getDuration(); let duration = this.getDuration();
var curve = this.getCurve(); let curve = this.getCurve();
UIView.animateWithDurationAnimationsCompletion(duration, () => { UIView.animateWithDurationAnimationsCompletion(duration, () => {
UIView.setAnimationCurve(curve); UIView.setAnimationCurve(curve);
toView.transform = CGAffineTransformIdentity; toView.transform = CGAffineTransformIdentity;
fromView.transform = fromViewEndTransform; fromView.transform = fromViewEndTransform;
}, completion); }, (finished: boolean) => {
toView.transform = originalToViewTransform;
fromView.transform = originalFromViewTransform;
completion(finished);
});
} }
} }