Merge pull request #2312 from NativeScript/raikov/fix-2161b

Fixed: TranslateX and Animate in iOS strange behaviour on 2.0
This commit is contained in:
tzraikov
2016-06-20 09:58:17 +03:00
committed by GitHub

View File

@ -218,7 +218,6 @@ export class Animation extends common.Animation implements definition.Animation
private static _getNativeAnimationArguments(animation: PropertyAnimationInfo, valueSource: number): AnimationInfo { private static _getNativeAnimationArguments(animation: PropertyAnimationInfo, valueSource: number): AnimationInfo {
let nativeView = <UIView>animation.target._nativeView; let nativeView = <UIView>animation.target._nativeView;
let presentationLayer = nativeView.layer.presentationLayer();
let propertyNameToAnimate = animation.property; let propertyNameToAnimate = animation.property;
let value = animation.value; let value = animation.value;
let originalValue; let originalValue;
@ -236,14 +235,8 @@ export class Animation extends common.Animation implements definition.Animation
animation._propertyResetCallback = (value, valueSource) => { animation._propertyResetCallback = (value, valueSource) => {
animation.target.style._setValue(style.backgroundColorProperty, value, valueSource); animation.target.style._setValue(style.backgroundColorProperty, value, valueSource);
}; };
if (presentationLayer != null && valueSource !== dependencyObservable.ValueSource.Css) { originalValue = nativeView.layer.backgroundColor;
originalValue = presentationLayer.backgroundColor;
}
else {
originalValue = nativeView.layer.backgroundColor;
}
if (nativeView instanceof UILabel) { if (nativeView instanceof UILabel) {
originalValue = nativeView.layer.backgroundColor;
nativeView.setValueForKey(UIColor.clearColor(), "backgroundColor"); nativeView.setValueForKey(UIColor.clearColor(), "backgroundColor");
} }
value = value.CGColor; value = value.CGColor;
@ -253,12 +246,7 @@ export class Animation extends common.Animation implements definition.Animation
animation._propertyResetCallback = (value, valueSource) => { animation._propertyResetCallback = (value, valueSource) => {
animation.target.style._setValue(style.opacityProperty, value, valueSource); animation.target.style._setValue(style.opacityProperty, value, valueSource);
}; };
if (presentationLayer != null && valueSource !== dependencyObservable.ValueSource.Css) { originalValue = nativeView.layer.opacity;
originalValue = presentationLayer.opacity;
}
else {
originalValue = nativeView.layer.opacity;
}
break; break;
case common.Properties.rotate: case common.Properties.rotate:
animation._originalValue = animation.target.rotate !== undefined ? animation.target.rotate : 0; animation._originalValue = animation.target.rotate !== undefined ? animation.target.rotate : 0;
@ -266,7 +254,7 @@ export class Animation extends common.Animation implements definition.Animation
animation.target.style._setValue(style.rotateProperty, value, valueSource); animation.target.style._setValue(style.rotateProperty, value, valueSource);
}; };
propertyNameToAnimate = "transform.rotation"; propertyNameToAnimate = "transform.rotation";
originalValue = tempRotate; originalValue = nativeView.layer.valueForKeyPath("transform.rotation");
if (originalValue === 0 && animation.target.rotate !== undefined && if (originalValue === 0 && animation.target.rotate !== undefined &&
animation.target.rotate !== 0 && Math.floor(value / 360) - value / 360 === 0) { animation.target.rotate !== 0 && Math.floor(value / 360) - value / 360 === 0) {
originalValue = animation.target.rotate * Math.PI / 180; originalValue = animation.target.rotate * Math.PI / 180;
@ -284,12 +272,7 @@ export class Animation extends common.Animation implements definition.Animation
animation.target.style._setValue(style.translateYProperty, value.y, valueSource); animation.target.style._setValue(style.translateYProperty, value.y, valueSource);
}; };
propertyNameToAnimate = "transform"; propertyNameToAnimate = "transform";
if (presentationLayer != null && valueSource !== dependencyObservable.ValueSource.Css) { originalValue = NSValue.valueWithCATransform3D(nativeView.layer.transform);
originalValue = NSValue.valueWithCATransform3D(presentationLayer.transform);
}
else {
originalValue = NSValue.valueWithCATransform3D(nativeView.layer.transform);
}
value = NSValue.valueWithCATransform3D(CATransform3DTranslate(nativeView.layer.transform, value.x, value.y, 0)); value = NSValue.valueWithCATransform3D(CATransform3DTranslate(nativeView.layer.transform, value.x, value.y, 0));
break; break;
case common.Properties.scale: case common.Properties.scale:
@ -299,21 +282,11 @@ export class Animation extends common.Animation implements definition.Animation
animation.target.style._setValue(style.scaleYProperty, value.y, valueSource); animation.target.style._setValue(style.scaleYProperty, value.y, valueSource);
}; };
propertyNameToAnimate = "transform"; propertyNameToAnimate = "transform";
if (presentationLayer != null && valueSource !== dependencyObservable.ValueSource.Css) { originalValue = NSValue.valueWithCATransform3D(nativeView.layer.transform);
originalValue = NSValue.valueWithCATransform3D(presentationLayer.transform);
}
else {
originalValue = NSValue.valueWithCATransform3D(nativeView.layer.transform);
}
value = NSValue.valueWithCATransform3D(CATransform3DScale(nativeView.layer.transform, value.x, value.y, 1)); value = NSValue.valueWithCATransform3D(CATransform3DScale(nativeView.layer.transform, value.x, value.y, 1));
break; break;
case _transform: case _transform:
if (presentationLayer != null && valueSource !== dependencyObservable.ValueSource.Css) { originalValue = NSValue.valueWithCATransform3D(nativeView.layer.transform);
originalValue = NSValue.valueWithCATransform3D(presentationLayer.transform);
}
else {
originalValue = NSValue.valueWithCATransform3D(nativeView.layer.transform);
}
animation._originalValue = { xs: animation.target.scaleX, ys: animation.target.scaleY, animation._originalValue = { xs: animation.target.scaleX, ys: animation.target.scaleY,
xt: animation.target.translateX, yt: animation.target.translateY }; xt: animation.target.translateX, yt: animation.target.translateY };
animation._propertyResetCallback = (value, valueSource) => { animation._propertyResetCallback = (value, valueSource) => {
@ -595,14 +568,9 @@ export function _resolveAnimationCurve(curve: any): any {
export function _getTransformMismatchErrorMessage(view: viewModule.View): string { export function _getTransformMismatchErrorMessage(view: viewModule.View): string {
// Order is important: translate, rotate, scale // Order is important: translate, rotate, scale
let result: CGAffineTransform = CGAffineTransformIdentity; let result: CGAffineTransform = CGAffineTransformIdentity;
let translateX = view.translateX ? view.translateX : 0; result = CGAffineTransformTranslate(result, view.translateX || 0, view.translateY || 0);
let translateY = view.translateY ? view.translateY : 0; result = CGAffineTransformRotate(result, (view.rotate || 0) * Math.PI / 180);
let scaleX = view.scaleX ? view.scaleX : 1; result = CGAffineTransformScale(result, view.scaleX || 1, view.scaleY || 1);
let scaleY = view.scaleY ? view.scaleY : 1;
let rotate = view.rotate ? view.rotate : 0;
result = CGAffineTransformTranslate(result, translateX, translateY);
result = CGAffineTransformRotate(result, rotate * Math.PI / 180);
result = CGAffineTransformScale(result, scaleX, scaleY);
let viewTransform = NSStringFromCGAffineTransform(result); let viewTransform = NSStringFromCGAffineTransform(result);
let nativeTransform = NSStringFromCGAffineTransform(view._nativeView.transform); let nativeTransform = NSStringFromCGAffineTransform(view._nativeView.transform);
@ -611,4 +579,4 @@ export function _getTransformMismatchErrorMessage(view: viewModule.View): string
} }
return undefined; return undefined;
} }