diff --git a/apps/toolbox/src/box-shadow.ts b/apps/toolbox/src/box-shadow.ts
index 379db6b91..9815bc6e2 100644
--- a/apps/toolbox/src/box-shadow.ts
+++ b/apps/toolbox/src/box-shadow.ts
@@ -11,13 +11,17 @@ export class BoxShadowModel extends Observable {
private _selectedBackgroundType: string;
private _selectedBorderType: string;
private _selectedAnimation: string;
- private _boxShadow: string;
+ private _boxShadow: string = '5 5 1 1 rgba(255, 0, 0, .9)';
background: string;
borderWidth: number;
borderRadius: number;
appliedBoxShadow: string;
+ get boxShadow(): string {
+ return this._boxShadow;
+ }
+
constructor() {
super();
}
diff --git a/apps/toolbox/src/box-shadow.xml b/apps/toolbox/src/box-shadow.xml
index 64fee8d49..d1d373a95 100644
--- a/apps/toolbox/src/box-shadow.xml
+++ b/apps/toolbox/src/box-shadow.xml
@@ -9,14 +9,14 @@
-
@@ -29,7 +29,7 @@
boxShadow="{{ appliedBoxShadow }}"
borderWidth="{{ borderWidth }}"
borderRadius="{{ borderRadius }}"
- backgroundColor="{{ background }}"
+ background="{{ background }}"
tap="{{ toggleAnimation }}"
>
@@ -42,7 +42,7 @@
boxShadow="{{ appliedBoxShadow }}"
borderWidth="{{ borderWidth }}"
borderRadius="{{ borderRadius }}"
- backgroundColor="{{ background }}"
+ background="{{ background }}"
tap="{{ toggleAnimation }}"
>
@@ -55,7 +55,7 @@
boxShadow="{{ appliedBoxShadow }}"
borderWidth="{{ borderWidth }}"
borderRadius="{{ borderRadius }}"
- backgroundColor="{{ background }}"
+ background="{{ background }}"
tap="{{ toggleAnimation }}"
>
@@ -68,17 +68,33 @@
boxShadow="{{ appliedBoxShadow }}"
borderWidth="{{ borderWidth }}"
borderRadius="{{ borderRadius }}"
- backgroundColor="{{ background }}"
+ background="{{ background }}"
tap="{{ toggleAnimation }}"
>
+
+
+
+
+
+
-
@@ -90,32 +106,53 @@
boxShadow="{{ appliedBoxShadow }}"
borderWidth="{{ borderWidth }}"
borderRadius="{{ borderRadius }}"
- backgroundColor="{{ background }}"
+ background="{{ background }}"
tap="{{ toggleAnimation }}"
text="Label">
-
-
+
+
+
+
+
+
+
+
+
+
@@ -146,6 +184,7 @@
+
@@ -172,7 +211,7 @@
-
+
diff --git a/packages/core/ui/styling/background.ios.ts b/packages/core/ui/styling/background.ios.ts
index 7ade0ae42..4ab83ff6b 100644
--- a/packages/core/ui/styling/background.ios.ts
+++ b/packages/core/ui/styling/background.ios.ts
@@ -760,7 +760,10 @@ function drawBoxShadow(nativeView: NativeView, view: View, boxShadow: CSSShadow,
function clearBoxShadow(nativeView: NativeView) {
nativeView.clipsToBounds = true;
- const layer: CALayer = iOSNativeHelper.getShadowLayer(nativeView, 'ns-box-shadow');
+ const layer: CALayer = iOSNativeHelper.getShadowLayer(nativeView, 'ns-box-shadow', false);
+ if (!layer) {
+ return;
+ }
layer.masksToBounds = true;
layer.shadowOffset = CGSizeMake(0, 0);
layer.shadowColor = UIColor.clearColor.CGColor;
diff --git a/packages/core/utils/native-helper.d.ts b/packages/core/utils/native-helper.d.ts
index 074d40a7f..1c0fe311b 100644
--- a/packages/core/utils/native-helper.d.ts
+++ b/packages/core/utils/native-helper.d.ts
@@ -171,8 +171,9 @@ export namespace iOSNativeHelper {
/**
* @param nativeView UIView to find shadow layer with
* @param name Name of the shadow layer if looking for specifically named layer
+ * @param create should we create a new layer if not found
*/
- export function getShadowLayer(nativeView: any /* UIView */, name?: string): any; /* CALayer */
+ export function getShadowLayer(nativeView: any /* UIView */, name?: string, create?: boolean): any; /* CALayer */
/**
* Create a UIDocumentInteractionControllerDelegate implementation for use with UIDocumentInteractionController
diff --git a/packages/core/utils/native-helper.ios.ts b/packages/core/utils/native-helper.ios.ts
index e13850d6d..63df160cc 100644
--- a/packages/core/utils/native-helper.ios.ts
+++ b/packages/core/utils/native-helper.ios.ts
@@ -120,44 +120,86 @@ export namespace iOSNativeHelper {
return transform;
}
- export function getShadowLayer(nativeView: UIView, name?: string): CALayer {
- let layer: CALayer;
- name = name || 'ns-shadow-layer';
- if (nativeView) {
- if (nativeView.layer) {
- if (nativeView.layer.name === name) {
- console.log('- found shadow layer - reusing.');
- return nativeView.layer;
- } else {
- if (nativeView.layer.sublayers && nativeView.layer.sublayers.count) {
- console.log('nativeView.layer.sublayers.count:', nativeView.layer.sublayers.count);
- for (let i = 0; i < nativeView.layer.sublayers.count; i++) {
- console.log(`layer ${i}:`, nativeView.layer.sublayers.objectAtIndex(i));
- console.log(`layer ${i} name:`, nativeView.layer.sublayers.objectAtIndex(i).name);
- if (nativeView.layer.sublayers.objectAtIndex(i).name === name) {
- return nativeView.layer.sublayers.objectAtIndex(i);
- }
- }
- if (nativeView instanceof UITextView) {
- layer = nativeView.layer.sublayers.objectAtIndex(1);
- } else {
- layer = nativeView.layer.sublayers.objectAtIndex(nativeView.layer.sublayers.count - 1);
- }
- } else {
- layer = nativeView.layer;
- }
+ export function getShadowLayer(nativeView: UIView, name: string = 'ns-shadow-layer', create: boolean = true): CALayer {
+ return nativeView.layer;
+
+ console.log(`--- ${create ? 'CREATE' : 'READ'}`);
+
+ /**
+ * UIView
+ * -> Shadow
+ *
+ *
+ * UIView
+ * -> UIView
+ * -> Shadow
+ */
+
+ if (!nativeView) {
+ return null;
+ }
+
+ if (!nativeView.layer) {
+ // should never hit this?
+ console.log('- no layer! -');
+ return null;
+ }
+
+ // if the nativeView's layer is the shadow layer?
+ if (nativeView.layer.name === name) {
+ console.log('- found shadow layer - reusing.');
+ return nativeView.layer;
+ }
+
+ console.log('>> layer :', nativeView.layer);
+ if (nativeView.layer.sublayers?.count) {
+ const count = nativeView.layer.sublayers.count;
+ for (let i = 0; i < count; i++) {
+ const subLayer = nativeView.layer.sublayers.objectAtIndex(i);
+
+ console.log(`>> subLayer ${i + 1}/${count} :`, subLayer);
+ console.log(`>> subLayer ${i + 1}/${count} name :`, subLayer.name);
+
+ if (subLayer.name === name) {
+ console.log('- found shadow sublayer - reusing.');
+ return subLayer;
}
- } else {
- // could this occur?
- console.log('no layer!');
}
+ // if (nativeView instanceof UITextView) {
+ // return nativeView.layer.sublayers.objectAtIndex(1);
+ // } else {
+ // return nativeView.layer.sublayers.objectAtIndex(nativeView.layer.sublayers.count - 1);
+ // }
}
- console.log('layer.name:', layer.name);
- if (!layer.name) {
- // only explicitly name if the developer had not named it themselves and/or some other integration
- layer.name = name;
+ // else {
+ // layer = nativeView.layer;
+ // }
+
+ // we're not interested in creating a new layer
+ if (!create) {
+ return null;
}
- return layer;
+
+ console.log(`- adding a new layer for - ${name}`);
+
+ const viewLayer = nativeView.layer;
+ const newLayer = CALayer.layer();
+
+ newLayer.name = name;
+ newLayer.zPosition = 0.0;
+ // nativeView.layer.insertSublayerBelow(newLayer, nativeView.layer)
+ // newLayer.insertSublayerAtIndex(nativeView.layer, 0)
+ // nativeView.layer.zPosition = 1.0;
+ // nativeView.layer.addSublayer(newLayer);
+
+ // nativeView.layer = CALayer.layer()
+
+ nativeView.layer.insertSublayerAtIndex(newLayer, 0);
+ // nativeView.layer.insertSublayerAtIndex(viewLayer, 1)
+
+ // nativeView.layer.replaceSublayerWith(newLayer, nativeView.layer);
+
+ return newLayer;
}
export function createUIDocumentInteractionControllerDelegate(): NSObject {