Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions packages/core/ui/core/view/index.ios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,9 @@ export class View extends ViewCommon implements ViewDefinition {
CATransaction.setDisableActions(true);

if (nativeView.outerShadowContainerLayer) {
const { x: originX, y: originY }: CGPoint = nativeView.outerShadowContainerLayer.anchorPoint;
nativeView.outerShadowContainerLayer.bounds = nativeView.bounds;
nativeView.outerShadowContainerLayer.position = CGPointMake(frame.origin.x + frame.size.width / 2, frame.origin.y + frame.size.height / 2);
nativeView.outerShadowContainerLayer.position = CGPointMake(frame.origin.x + frame.size.width * originX, frame.origin.y + frame.size.height * originY);
}

CATransaction.setDisableActions(false);
Expand Down Expand Up @@ -450,11 +451,27 @@ export class View extends ViewCommon implements ViewDefinition {
}

public updateOriginPoint(originX: number, originY: number) {
const nativeView: NativeScriptUIView = <NativeScriptUIView>this.nativeViewProtected;
const newPoint = CGPointMake(originX, originY);
this.nativeViewProtected.layer.anchorPoint = newPoint;

// Disable CALayer animatable property changes
CATransaction.setDisableActions(true);

nativeView.layer.anchorPoint = newPoint;
if (this._cachedFrame) {
this._setNativeViewFrame(this.nativeViewProtected, this._cachedFrame);
this._setNativeViewFrame(nativeView, this._cachedFrame);
}

// Make sure new origin also applies to outer shadow layers
if (nativeView.outerShadowContainerLayer) {
// This is the new frame after view origin point update
const frame = nativeView.frame;

nativeView.outerShadowContainerLayer.anchorPoint = newPoint;
nativeView.outerShadowContainerLayer.position = CGPointMake(frame.origin.x + frame.size.width * originX, frame.origin.y + frame.size.height * originY);
}

CATransaction.setDisableActions(false);
}

// By default we update the view's presentation layer when setting backgroundColor and opacity properties.
Expand Down
7 changes: 5 additions & 2 deletions packages/core/ui/styling/background.ios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1125,9 +1125,12 @@ function drawBoxShadow(view: View): void {
}
}

// Since shadow layer is added to view layer's superlayer, we have to be more specific about shadow layer position
outerShadowContainerLayer.bounds = bounds;
outerShadowContainerLayer.position = CGPointMake(viewFrame.origin.x + viewFrame.size.width / 2, viewFrame.origin.y + viewFrame.size.height / 2);
outerShadowContainerLayer.anchorPoint = layer.anchorPoint;

// Since shadow uses superlayer's coordinate system, we have to be more specific about shadow layer position
const { x: originX, y: originY }: CGPoint = outerShadowContainerLayer.anchorPoint;
outerShadowContainerLayer.position = CGPointMake(viewFrame.origin.x + viewFrame.size.width * originX, viewFrame.origin.y + viewFrame.size.height * originY);

// Inherit view visibility values
outerShadowContainerLayer.opacity = layer.opacity;
Expand Down